{"info":{"title":"Northflank API","description":"This is the API for northflank.com","version":"1.0.0"},"paths":{"/v1/":{"get":{"operationId":"get","summary":"Health check","description":"Returns api service status","parameters":[],"responses":{"200":{"description":"success"}},"tags":["Miscellaneous"],"security":[]}},"/v1/addon-types":{"get":{"operationId":"getAddonTypes","summary":"List addon types","description":"Gets information about the available addon types","parameters":[],"responses":{"200":{"description":"A list of the available addon types.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"addonTypes":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"The identifier for the addon type.","example":"redis"},"name":{"type":"string","description":"The name of the addon type.","example":"Redis"},"description":{"type":"string","description":"A description of the addon.","example":"Redis implements a distributed, in-memory key-value database with optional durability."},"features":{"type":"object","properties":{"backupsDump":{"type":"boolean","description":"Whether this addon supports native (dump) backups","example":false},"customDBName":{"type":"boolean","description":"Whether this addon supports customising the database name.","example":false},"forkAddon":{"type":"boolean","description":"Whether this addon supports addon forking - creating a new addon from an existing addon backup.","example":false},"importDump":{"type":"boolean","description":"Whether this addon supports importing from an external backup.","example":false},"importLive":{"type":"boolean","description":"Whether this addon supports importing from an existing live database.","example":false},"scaleReplicas":{"type":"boolean","description":"Whether this addon supports replica scaling.","example":false},"tls":{"type":"boolean","description":"Whether this addon supports connection via TLS.","example":true},"externalAccess":{"type":"boolean","description":"Whether this addon supports external connection.","example":true}},"required":["backupsDump","customDBName","forkAddon","importDump","importLive","scaleReplicas","tls","externalAccess"],"additionalProperties":false,"description":"Features supported by this addon type."},"versions":{"type":"array","items":{"type":"string","description":"A version string.","example":"6.0.8"},"description":"A list of available versions of the addon type."},"major":{"type":"array","items":{"type":"string","description":"A major version string.","example":"6.0"},"description":"A list of available major versions of the addon type."},"resources":{"type":"object","properties":{"storage":{"type":"object","properties":{"options":{"type":"array","items":{"type":"number","format":"float","example":1024},"description":"Available options for storage size for this addon, in MB."},"default":{"type":"number","format":"float","description":"The default storage value for this addon.","example":1024}},"required":["options","default"],"additionalProperties":false,"description":"Details about storage size options for this addon."},"replicas":{"type":"object","properties":{"options":{"type":"array","items":{"type":"number","format":"float","example":1},"description":"Available options for replica counts for this addon."},"default":{"type":"number","format":"float","description":"The default replica count for this addon.","example":1}},"required":["options","default"],"additionalProperties":false,"description":"Details about replica count options for this addon."}},"required":["storage","replicas"],"additionalProperties":false,"description":"Details about resource options for the addon type."}},"required":["type","name","description","versions","major","resources"],"additionalProperties":false,"description":"Northflank-managed addon type"}},{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"The identifier for the addon type.","example":"redis"},"name":{"type":"string","description":"The name of the addon type.","example":"Redis"},"description":{"type":"string","description":"A description of the addon.","example":"Redis implements a distributed, in-memory key-value database with optional durability."},"features":{"type":"object","properties":{"backupsDump":{"type":"boolean","description":"Whether this addon supports native (dump) backups","example":false},"customDBName":{"type":"boolean","description":"Whether this addon supports customising the database name.","example":false},"forkAddon":{"type":"boolean","description":"Whether this addon supports addon forking - creating a new addon from an existing addon backup.","example":false},"importDump":{"type":"boolean","description":"Whether this addon supports importing from an external backup.","example":false},"importLive":{"type":"boolean","description":"Whether this addon supports importing from an existing live database.","example":false},"scaleReplicas":{"type":"boolean","description":"Whether this addon supports replica scaling.","example":false},"tls":{"type":"boolean","description":"Whether this addon supports connection via TLS.","example":true},"externalAccess":{"type":"boolean","description":"Whether this addon supports external connection.","example":true}},"required":["backupsDump","customDBName","forkAddon","importDump","importLive","scaleReplicas","tls","externalAccess"],"additionalProperties":false,"description":"Features supported by this addon type."},"config":{"type":"object","properties":{"showTemplateValues":{"type":"boolean","description":"Allow addon user to view values provided to templating engine.","default":true},"enableTemplateValuesModification":{"type":"boolean","description":"Allow addon user to edit values provided to templating engine.","default":true},"enableErrorRecovery":{"type":"boolean","description":"Allow addon user to view and resolve potential errors occuring with templating engine run.","default":true},"installCrds":{"type":"boolean","description":"Install CRDs provided in resource bundle.","default":false},"useNfSecretInjection":{"type":"boolean","description":"Apply Northflank secret injection instead of using Kubernetes secrets.","default":true},"useNfImagePullSecret":{"type":"boolean","description":"Inject Northflank-specific Kubernetes imagePullSecret to Pod resources.","default":true}},"additionalProperties":false},"scope":{"type":"string","enum":["project","cluster"],"description":"If the addon deploys any k8s resources which are not namespace/project-scoped, it's a cluster scoped addon"}},"required":["type","name","description","config","scope"],"additionalProperties":false,"description":"Custom addon type"}}],"description":"A list of available addon types."}},"required":["addonTypes"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons"],"security":[],"x-nf-cli-command":["get","addon","types"]}},"/v1/auth":{"get":{"operationId":"getAuth","summary":"Get current authentication info","description":"Returns details about the authentication material used in this request.","parameters":[],"responses":{"200":{"description":"Details about the current authentication.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tokenKind":{"type":"string","enum":["api","session"],"description":"The type of authentication material used for the request.","example":"api"},"id":{"type":"string","description":"The API token ID (slug) or session token UUID.","example":"my-api-token"},"name":{"type":"string","description":"The API token name or session token label, if set.","example":"My API Token"},"description":{"type":"string","description":"The description of the API token, if API token authentication was used.","example":"CI/CD pipeline token"},"entityId":{"type":"string","description":"The ID (slug) of the entity this authentication material is scoped to.","example":"my-team"},"entityUid":{"type":"string","description":"The object ID of the entity this authentication material is scoped to.","example":"507f1f77bcf86cd799439011"},"entityType":{"type":"string","enum":["team","org"],"description":"The type of entity this authentication material is scoped to.","example":"team"},"orgId":{"type":"string","description":"The ID (slug) of the organisation, if the entity is an org-owned team.","example":"my-org"},"orgUid":{"type":"string","description":"The object ID of the organisation, if the entity is an org-owned team.","example":"507f191e810c19729de860ea"},"role":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the role.","example":"Developer"},"roleId":{"type":"string","description":"The ID (slug) of the role.","example":"developer"},"roleType":{"type":"string","enum":["team","org"],"description":"The type of the role.","example":"team"},"entityType":{"type":"string","enum":["team","org"],"description":"The entity type of the role.","example":"team"}},"additionalProperties":false,"description":"The role assigned to the API token, if API token authentication was used."},"permissions":{"type":"object","properties":{"orgScope":{"type":"array","items":{"type":"string"},"description":"Organisation-level permission strings.","default":[]},"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permission strings.","default":[]}},"additionalProperties":false,"description":"The effective permissions granted to this authentication material."},"creatorEmail":{"type":"string","format":"email","description":"The email of the user who created the API token.","example":"user@example.com"},"createdAt":{"type":"string","format":"date-time","description":"The time the authentication material was created.","example":"2024-01-15T10:30:00.000Z"},"expiresAt":{"type":"string","format":"date-time","nullable":true,"description":"The time the authentication material expires, or null if it has no expiry.","example":"2024-07-15T10:30:00.000Z"}},"required":["tokenKind","id","entityId","entityUid","entityType","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Auth"],"security":[],"x-nf-cli-command":["get","auth"]}},"/v1/backup-destinations":{"get":{"$ref":"#/components/pathItems/v1-backup-destinations-get"},"post":{"$ref":"#/components/pathItems/v1-backup-destinations-post"}},"/v1/teams/{teamId}/backup-destinations":{"get":{"$ref":"#/components/pathItems/v1-backup-destinations-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-backup-destinations-post-team-scoped"}},"/v1/backup-destinations/{backupDestinationId}":{"get":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--get"},"patch":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--patch"},"delete":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--delete"}},"/v1/teams/{teamId}/backup-destinations/{backupDestinationId}":{"get":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--delete-team-scoped"}},"/v1/backup-destinations/{backupDestinationId}/backups":{"get":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--backups-get"}},"/v1/teams/{teamId}/backup-destinations/{backupDestinationId}/backups":{"get":{"$ref":"#/components/pathItems/v1-backup-destinations--backupDestinationId--backups-get-team-scoped"}},"/v1/billing/credit-balance":{"get":{"$ref":"#/components/pathItems/v1-billing-credit-balance-get"}},"/v1/teams/{teamId}/billing/credit-balance":{"get":{"$ref":"#/components/pathItems/v1-billing-credit-balance-get-team-scoped"}},"/v1/billing/invoices":{"get":{"$ref":"#/components/pathItems/v1-billing-invoices-get"}},"/v1/teams/{teamId}/billing/invoices":{"get":{"$ref":"#/components/pathItems/v1-billing-invoices-get-team-scoped"}},"/v1/billing/invoices/{invoiceId}":{"get":{"$ref":"#/components/pathItems/v1-billing-invoices--invoiceId--get"}},"/v1/teams/{teamId}/billing/invoices/{invoiceId}":{"get":{"$ref":"#/components/pathItems/v1-billing-invoices--invoiceId--get-team-scoped"}},"/v1/billing/usage":{"get":{"$ref":"#/components/pathItems/v1-billing-usage-get"}},"/v1/teams/{teamId}/billing/usage":{"get":{"$ref":"#/components/pathItems/v1-billing-usage-get-team-scoped"}},"/v1/billing/usage/{timestamp}":{"get":{"$ref":"#/components/pathItems/v1-billing-usage--timestamp--get"}},"/v1/teams/{teamId}/billing/usage/{timestamp}":{"get":{"$ref":"#/components/pathItems/v1-billing-usage--timestamp--get-team-scoped"}},"/v1/cloud-providers":{"get":{"operationId":"getCloudProviders","summary":"List providers","description":"Lists supported cloud providers","parameters":[],"responses":{"200":{"description":"A list of supported cloud providers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the provider.","example":"aws"},"name":{"type":"string","description":"The name of the provider.","example":"Amazon Web Services"},"engine":{"type":"string","description":"The kubernetes engine used.","example":"Elastic Kubernetes Service (EKS)"},"kubernetesVersions":{"type":"array","items":{"type":"string","example":"1.27"},"description":"An array of available kubernetes versions"},"diskSizes":{"type":"array","items":{"type":"number","format":"float","example":100},"description":"An array of supported node disk sizes"},"flags":{"type":"object","properties":{"preemptible":{"type":"boolean","description":"Preemptible/Spot node pool support","example":true},"autoscaling":{"type":"boolean","description":"Node pool autoscaling support","example":true}},"additionalProperties":false,"description":"An object with feature flags to indicate (un)supported features"}},"required":["id","name","engine","kubernetesVersions","diskSizes","flags"],"additionalProperties":false,"description":"A provider object"},"description":"An array of supported cloud providers"}},"required":["providers"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers"],"security":[],"x-nf-cli-command":["list","cloud","providers"]}},"/v1/cloud-providers/clusters":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters-get"},"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters-post"},"put":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters-put"}},"/v1/teams/{teamId}/cloud-providers/clusters":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters-put-team-scoped"}},"/v1/cloud-providers/clusters/{clusterId}":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--get"},"patch":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--patch"},"delete":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--delete"}},"/v1/teams/{teamId}/cloud-providers/clusters/{clusterId}":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--delete-team-scoped"}},"/v1/cloud-providers/clusters/{clusterId}/nodes":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes-get"}},"/v1/teams/{teamId}/cloud-providers/clusters/{clusterId}/nodes":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes-get-team-scoped"}},"/v1/cloud-providers/clusters/{clusterId}/nodes/{nodeId}/cordon":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes--nodeId--cordon-post"}},"/v1/teams/{teamId}/cloud-providers/clusters/{clusterId}/nodes/{nodeId}/cordon":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes--nodeId--cordon-post-team-scoped"}},"/v1/cloud-providers/clusters/{clusterId}/nodes/{nodeId}/drain":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes--nodeId--drain-post"}},"/v1/teams/{teamId}/cloud-providers/clusters/{clusterId}/nodes/{nodeId}/drain":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes--nodeId--drain-post-team-scoped"}},"/v1/cloud-providers/clusters/{clusterId}/nodes/{nodeId}/uncordon":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes--nodeId--uncordon-post"}},"/v1/teams/{teamId}/cloud-providers/clusters/{clusterId}/nodes/{nodeId}/uncordon":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-clusters--clusterId--nodes--nodeId--uncordon-post-team-scoped"}},"/v1/cloud-providers/integrations":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations-get"},"post":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations-post"},"put":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations-put"}},"/v1/teams/{teamId}/cloud-providers/integrations":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations-put-team-scoped"}},"/v1/cloud-providers/integrations/{integrationId}":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--get"},"patch":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--patch"},"delete":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--delete"}},"/v1/teams/{teamId}/cloud-providers/integrations/{integrationId}":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--delete-team-scoped"}},"/v1/cloud-providers/integrations/{integrationId}/workload-identity-provider":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--workload-identity-provider-get"}},"/v1/teams/{teamId}/cloud-providers/integrations/{integrationId}/workload-identity-provider":{"get":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--workload-identity-provider-get-team-scoped"}},"/v1/cloud-providers/integrations/{integrationId}/workload-identity-provider/install":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--workload-identity-provider-install-post"}},"/v1/teams/{teamId}/cloud-providers/integrations/{integrationId}/workload-identity-provider/install":{"post":{"$ref":"#/components/pathItems/v1-cloud-providers-integrations--integrationId--workload-identity-provider-install-post-team-scoped"}},"/v1/cloud-providers/node-types":{"get":{"operationId":"getCloudProvidersNodeTypes","summary":"List provider node types","description":"Lists supported cloud provider node types","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"provider","type":"string","description":"If provided, only returns items belonging to this cloud provider.","example":"gcp","in":"query","schema":{"name":"provider","type":"string","description":"If provided, only returns items belonging to this cloud provider.","example":"gcp","in":"query"}},{"name":"region","type":"string","description":"If provided, only returns items available in this region.","example":"europe-west-1","in":"query","schema":{"name":"region","type":"string","description":"If provided, only returns items available in this region.","example":"europe-west-1","in":"query"}},{"name":"family","type":"string","description":"If provided, only returns items of this family.","example":"N","in":"query","schema":{"name":"family","type":"string","description":"If provided, only returns items of this family.","example":"N","in":"query"}},{"name":"maxGenerationAge","type":"integer","description":"If provided, only returns items with a generation age less than or equal to the number given.","example":0,"in":"query","schema":{"name":"maxGenerationAge","type":"integer","description":"If provided, only returns items with a generation age less than or equal to the number given.","example":0,"in":"query"}},{"name":"hasGpu","type":"boolean","description":"If true, only returns items with GPUs. If false, only returns items without GPUs.","example":true,"in":"query","schema":{"name":"hasGpu","type":"boolean","description":"If true, only returns items with GPUs. If false, only returns items without GPUs.","example":true,"in":"query"}}],"responses":{"200":{"description":"A list of supported cloud provider node types.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the node type","example":"n2-standard-8"},"name":{"type":"string","description":"The name of the node type","example":"n2-standard-8"},"resources":{"type":"object","properties":{"vcpu":{"type":"integer","description":"Number of vCPU of this node type","example":8},"memory":{"type":"integer","description":"Amount of memory capacity in GB of this node type","example":32}},"additionalProperties":false,"description":"An listing the resources of this node type"},"family":{"type":"string","description":"Family of the node type","example":"N"},"processorFamily":{"type":"string","description":"Processor family of the node type","example":"intel"},"workloadType":{"type":"string","description":"Workload this node type is optimized for","example":"general-purpose"}},"required":["id","name","resources","family","processorFamily","workloadType"],"additionalProperties":false,"description":"A provider node type object"},"description":"An array of supported cloud provider node types"}},"required":["providers"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team","org"],"security":[],"x-nf-cli-command":["list","cloud","node-types"]}},"/v1/cloud-providers/permissions":{"get":{"operationId":"getCloudProvidersPermissions","summary":"List provider permissions","description":"Lists required cloud provider permissions for the selected integration features","parameters":[{"name":"provider","type":"string","enum":["aws","aws-eusc","gcp"],"description":"Cloud provider to retrieve required permissions for.","example":"aws","in":"query","schema":{"name":"provider","type":"string","enum":["aws","aws-eusc","gcp"],"description":"Cloud provider to retrieve required permissions for.","example":"aws","in":"query"}},{"name":"features","type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"minItems":1,"description":"Selected integration features to retrieve required permissions for.","example":["byoc"],"in":"query","schema":{"name":"features","type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"minItems":1,"description":"Selected integration features to retrieve required permissions for.","example":["byoc"],"in":"query"}}],"responses":{"200":{"description":"A list of required cloud provider permissions.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string"},"description":"Permissions required for the selected integration features.","example":["eks:CreateCluster"]},"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Cloud provider role ID.","example":"roles/container.admin"},"name":{"type":"string","description":"Cloud provider role name.","example":"Kubernetes Engine Admin"},"description":{"type":"string","description":"Cloud provider role description.","example":"Provides administrative access to Kubernetes clusters."},"permissions":{"type":"array","items":{"type":"string"},"description":"Required permissions covered by this role.","example":["container.clusters.create"]}},"required":["id","name","description","permissions"],"additionalProperties":false},"description":"Cloud provider roles covering the required permissions (GCP only)."}},"required":["permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team","org"],"security":[],"x-nf-cli-command":["list","cloud","permissions"]}},"/v1/cloud-providers/regions":{"get":{"operationId":"getCloudProvidersRegions","summary":"List provider regions","description":"Lists supported cloud provider regions","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"provider","type":"string","description":"If provided, only returns items belonging to this cloud provider.","example":"gcp","in":"query","schema":{"name":"provider","type":"string","description":"If provided, only returns items belonging to this cloud provider.","example":"gcp","in":"query"}}],"responses":{"200":{"description":"A list of supported cloud provider regions.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the region","example":"europe-west1"},"name":{"type":"string","description":"The name of the region","example":"europe-west1"},"availabilityZones":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The id of the availability zone","example":"europe-west1-b"},"name":{"type":"string","description":"The name of the availability zone","example":"europe-west1-b"}},"required":["id","name"],"additionalProperties":false},"description":"The availability zones belonging to this region"}},"required":["id","name","availabilityZones"],"additionalProperties":false,"description":"A provider region object"},"description":"An array of supported cloud provider regions"}},"required":["providers"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team","org"],"security":[],"x-nf-cli-command":["list","cloud","regions"]}},"/v1/container-snapshots":{"get":{"$ref":"#/components/pathItems/v1-container-snapshots-get"}},"/v1/teams/{teamId}/container-snapshots":{"get":{"$ref":"#/components/pathItems/v1-container-snapshots-get-team-scoped"}},"/v1/container-snapshots/{snapshotId}":{"get":{"$ref":"#/components/pathItems/v1-container-snapshots--snapshotId--get"},"delete":{"$ref":"#/components/pathItems/v1-container-snapshots--snapshotId--delete"}},"/v1/teams/{teamId}/container-snapshots/{snapshotId}":{"get":{"$ref":"#/components/pathItems/v1-container-snapshots--snapshotId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-container-snapshots--snapshotId--delete-team-scoped"}},"/v1/directory-groups":{"get":{"operationId":"getDirectoryGroups","summary":"List org directory groups","description":"Lists the Directory Sync directory groups for the authenticated org.","parameters":[],"responses":{"200":{"description":"A list of directory groups for the org.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"directoryGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the directory group.","example":"directory_group_1234567890ABCDEFGHIJKLMNOP"},"name":{"type":"string","description":"Display name of the directory group."},"idpId":{"type":"string","description":"ID of the linked group from the Identity Provider (IdP)."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","idpId","createdAt","updatedAt"],"additionalProperties":false,"description":"An org directory group object."},"description":"An array of org directory groups."}},"required":["directoryGroups"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Roles > Read","x-nf-org-scoped":true,"x-nf-cli-command":["get","org-directory-groups"]}},"/v1/directory-groups/{groupId}/members":{"get":{"operationId":"getDirectoryGroupsGroupidMembers","summary":"List directory group members","description":"Lists the users who are members of the org via a specific Directory Sync group.","parameters":[{"name":"groupId","type":"string","required":true,"description":"ID of the directory group","example":"directory_group_1234567890ABCDEFGHIJKLMNOP","in":"path","schema":{"name":"groupId","type":"string","required":true,"description":"ID of the directory group","example":"directory_group_1234567890ABCDEFGHIJKLMNOP","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of members in the directory group.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true,"description":"ID (username) of the directory member.","example":"john-doe"},"name":{"type":"string","description":"Display name from the member profile.","example":"John Doe"},"emails":{"type":"array","items":{"type":"string","format":"email"},"description":"Email addresses of the member.","example":["john@example.com"]},"lastLoginTime":{"type":"string","format":"date-time","description":"The time the member last logged in.","example":"2021-01-20T11:19:53.175Z"}},"required":["id"],"additionalProperties":false,"description":"A directory member object."},"description":"An array of members in the directory group."}},"required":["members"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Members > Read","x-nf-org-scoped":true,"x-nf-cli-command":["list","org-directory-group-members"]}},"/v1/dns-id":{"get":{"$ref":"#/components/pathItems/v1-dns-id-get"}},"/v1/teams/{teamId}/dns-id":{"get":{"$ref":"#/components/pathItems/v1-dns-id-get-team-scoped"}},"/v1/domains":{"get":{"$ref":"#/components/pathItems/v1-domains-get"},"post":{"$ref":"#/components/pathItems/v1-domains-post"}},"/v1/teams/{teamId}/domains":{"get":{"$ref":"#/components/pathItems/v1-domains-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-domains-post-team-scoped"}},"/v1/domains/{domain}":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--get"},"patch":{"$ref":"#/components/pathItems/v1-domains--domain--patch"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--delete"}},"/v1/teams/{teamId}/domains/{domain}":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-domains--domain--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--delete-team-scoped"}},"/v1/domains/{domain}/certificate":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--certificate-get"}},"/v1/teams/{teamId}/domains/{domain}/certificate":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--certificate-get-team-scoped"}},"/v1/domains/{domain}/import":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--import-post"}},"/v1/teams/{teamId}/domains/{domain}/import":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--import-post-team-scoped"}},"/v1/domains/{domain}/subdomains":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains-post"},"put":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains-put"}},"/v1/teams/{teamId}/domains/{domain}/subdomains":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains-put-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--get"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--delete"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--delete-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/assign":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--assign-post"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--assign-delete"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/assign":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--assign-post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--assign-delete-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/cdn/disable":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--cdn-disable-post"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/cdn/disable":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--cdn-disable-post-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/cdn/enable":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--cdn-enable-post"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/cdn/enable":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--cdn-enable-post-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/cdn/purge":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--cdn-purge-post"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/cdn/purge":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--cdn-purge-post-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/certificate/import":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--certificate-import-post"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/certificate/import":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--certificate-import-post-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/geo-routing":{"patch":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--geo-routing-patch"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/geo-routing":{"patch":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--geo-routing-patch-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/paths":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths-post"},"get":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths-get"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/paths":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths-post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths-get-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/paths/{subdomainPath}":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--get"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--delete"},"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--post"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/paths/{subdomainPath}":{"get":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--delete-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--post-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/paths/{subdomainPath}/assign":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-post"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-delete"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/paths/{subdomainPath}/assign":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-delete-team-scoped"}},"/v1/domains/{domain}/subdomains/{subdomain}/verify":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--verify-post"}},"/v1/teams/{teamId}/domains/{domain}/subdomains/{subdomain}/verify":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--subdomains--subdomain--verify-post-team-scoped"}},"/v1/domains/{domain}/verify":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--verify-post"}},"/v1/teams/{teamId}/domains/{domain}/verify":{"post":{"$ref":"#/components/pathItems/v1-domains--domain--verify-post-team-scoped"}},"/v1/egress-ips":{"get":{"$ref":"#/components/pathItems/v1-egress-ips-get"},"post":{"$ref":"#/components/pathItems/v1-egress-ips-post"},"put":{"$ref":"#/components/pathItems/v1-egress-ips-put"}},"/v1/teams/{teamId}/egress-ips":{"get":{"$ref":"#/components/pathItems/v1-egress-ips-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-egress-ips-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-egress-ips-put-team-scoped"}},"/v1/egress-ips/{egressIpId}":{"get":{"$ref":"#/components/pathItems/v1-egress-ips--egressIpId--get"},"patch":{"$ref":"#/components/pathItems/v1-egress-ips--egressIpId--patch"},"delete":{"$ref":"#/components/pathItems/v1-egress-ips--egressIpId--delete"}},"/v1/teams/{teamId}/egress-ips/{egressIpId}":{"get":{"$ref":"#/components/pathItems/v1-egress-ips--egressIpId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-egress-ips--egressIpId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-egress-ips--egressIpId--delete-team-scoped"}},"/v1/encryption/configurations":{"get":{"$ref":"#/components/pathItems/v1-encryption-configurations-get"},"post":{"$ref":"#/components/pathItems/v1-encryption-configurations-post"}},"/v1/teams/{teamId}/encryption/configurations":{"get":{"$ref":"#/components/pathItems/v1-encryption-configurations-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-encryption-configurations-post-team-scoped"}},"/v1/encryption/configurations/{encryptionConfigurationId}":{"get":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--get"}},"/v1/teams/{teamId}/encryption/configurations/{encryptionConfigurationId}":{"get":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--get-team-scoped"}},"/v1/encryption/configurations/{encryptionConfigurationId}/activate":{"post":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--activate-post"}},"/v1/teams/{teamId}/encryption/configurations/{encryptionConfigurationId}/activate":{"post":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--activate-post-team-scoped"}},"/v1/encryption/configurations/{encryptionConfigurationId}/deactivate":{"post":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--deactivate-post"}},"/v1/teams/{teamId}/encryption/configurations/{encryptionConfigurationId}/deactivate":{"post":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--deactivate-post-team-scoped"}},"/v1/encryption/configurations/{encryptionConfigurationId}/options":{"put":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--options-put"}},"/v1/teams/{teamId}/encryption/configurations/{encryptionConfigurationId}/options":{"put":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--options-put-team-scoped"}},"/v1/encryption/configurations/{encryptionConfigurationId}/settings":{"put":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--settings-put"}},"/v1/teams/{teamId}/encryption/configurations/{encryptionConfigurationId}/settings":{"put":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--settings-put-team-scoped"}},"/v1/encryption/configurations/{encryptionConfigurationId}/verify":{"post":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--verify-post"}},"/v1/teams/{teamId}/encryption/configurations/{encryptionConfigurationId}/verify":{"post":{"$ref":"#/components/pathItems/v1-encryption-configurations--encryptionConfigurationId--verify-post-team-scoped"}},"/v1/encryption/northflank-managed/activate":{"post":{"$ref":"#/components/pathItems/v1-encryption-northflank-managed-activate-post"}},"/v1/teams/{teamId}/encryption/northflank-managed/activate":{"post":{"$ref":"#/components/pathItems/v1-encryption-northflank-managed-activate-post-team-scoped"}},"/v1/encryption/usage":{"get":{"$ref":"#/components/pathItems/v1-encryption-usage-get"}},"/v1/teams/{teamId}/encryption/usage":{"get":{"$ref":"#/components/pathItems/v1-encryption-usage-get-team-scoped"}},"/v1/gradual-rollout-strategies":{"get":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies-get"},"post":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies-post"},"put":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies-put"}},"/v1/teams/{teamId}/gradual-rollout-strategies":{"get":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies-put-team-scoped"}},"/v1/gradual-rollout-strategies/{gradualRolloutStrategyId}":{"get":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies--gradualRolloutStrategyId--get"},"patch":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies--gradualRolloutStrategyId--patch"},"delete":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies--gradualRolloutStrategyId--delete"}},"/v1/teams/{teamId}/gradual-rollout-strategies/{gradualRolloutStrategyId}":{"get":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies--gradualRolloutStrategyId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies--gradualRolloutStrategyId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-gradual-rollout-strategies--gradualRolloutStrategyId--delete-team-scoped"}},"/v1/integrations/log-sinks":{"get":{"$ref":"#/components/pathItems/v1-integrations-log-sinks-get"},"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks-post"}},"/v1/teams/{teamId}/integrations/log-sinks":{"get":{"$ref":"#/components/pathItems/v1-integrations-log-sinks-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks-post-team-scoped"}},"/v1/integrations/log-sinks/{logSinkId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--get"},"delete":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--delete"}},"/v1/teams/{teamId}/integrations/log-sinks/{logSinkId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--delete-team-scoped"}},"/v1/integrations/log-sinks/{logSinkId}/pause":{"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--pause-post"}},"/v1/teams/{teamId}/integrations/log-sinks/{logSinkId}/pause":{"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--pause-post-team-scoped"}},"/v1/integrations/log-sinks/{logSinkId}/resume":{"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--resume-post"}},"/v1/teams/{teamId}/integrations/log-sinks/{logSinkId}/resume":{"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--resume-post-team-scoped"}},"/v1/integrations/log-sinks/{logSinkId}/settings":{"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--settings-post"}},"/v1/teams/{teamId}/integrations/log-sinks/{logSinkId}/settings":{"post":{"$ref":"#/components/pathItems/v1-integrations-log-sinks--logSinkId--settings-post-team-scoped"}},"/v1/integrations/notifications":{"get":{"$ref":"#/components/pathItems/v1-integrations-notifications-get"},"post":{"$ref":"#/components/pathItems/v1-integrations-notifications-post"}},"/v1/teams/{teamId}/integrations/notifications":{"get":{"$ref":"#/components/pathItems/v1-integrations-notifications-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-integrations-notifications-post-team-scoped"}},"/v1/integrations/notifications/{notificationId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-notifications--notificationId--get"},"post":{"$ref":"#/components/pathItems/v1-integrations-notifications--notificationId--post"},"delete":{"$ref":"#/components/pathItems/v1-integrations-notifications--notificationId--delete"}},"/v1/teams/{teamId}/integrations/notifications/{notificationId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-notifications--notificationId--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-integrations-notifications--notificationId--post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-integrations-notifications--notificationId--delete-team-scoped"}},"/v1/integrations/registries":{"get":{"$ref":"#/components/pathItems/v1-integrations-registries-get"},"post":{"$ref":"#/components/pathItems/v1-integrations-registries-post"}},"/v1/teams/{teamId}/integrations/registries":{"get":{"$ref":"#/components/pathItems/v1-integrations-registries-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-integrations-registries-post-team-scoped"}},"/v1/integrations/registries/{credentialId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-registries--credentialId--get"},"patch":{"$ref":"#/components/pathItems/v1-integrations-registries--credentialId--patch"},"delete":{"$ref":"#/components/pathItems/v1-integrations-registries--credentialId--delete"}},"/v1/teams/{teamId}/integrations/registries/{credentialId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-registries--credentialId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-integrations-registries--credentialId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-integrations-registries--credentialId--delete-team-scoped"}},"/v1/integrations/ssh-identities":{"get":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities-get"},"post":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities-post"}},"/v1/teams/{teamId}/integrations/ssh-identities":{"get":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities-post-team-scoped"}},"/v1/integrations/ssh-identities/{identityId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--get"},"put":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--put"},"patch":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--patch"},"delete":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--delete"}},"/v1/teams/{teamId}/integrations/ssh-identities/{identityId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--get-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--put-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-integrations-ssh-identities--identityId--delete-team-scoped"}},"/v1/integrations/vcs":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-get"}},"/v1/teams/{teamId}/integrations/vcs":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-get-team-scoped"}},"/v1/integrations/vcs/custom/{customVCSId}/token/{vcsLinkId}":{"post":{"$ref":"#/components/pathItems/v1-integrations-vcs-custom--customVCSId--token--vcsLinkId--post"}},"/v1/teams/{teamId}/integrations/vcs/custom/{customVCSId}/token/{vcsLinkId}":{"post":{"$ref":"#/components/pathItems/v1-integrations-vcs-custom--customVCSId--token--vcsLinkId--post-team-scoped"}},"/v1/integrations/vcs/link-sessions":{"post":{"$ref":"#/components/pathItems/v1-integrations-vcs-link-sessions-post"}},"/v1/teams/{teamId}/integrations/vcs/link-sessions":{"post":{"$ref":"#/components/pathItems/v1-integrations-vcs-link-sessions-post-team-scoped"}},"/v1/integrations/vcs/link-sessions/{linkSessionId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-link-sessions--linkSessionId--get"}},"/v1/teams/{teamId}/integrations/vcs/link-sessions/{linkSessionId}":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-link-sessions--linkSessionId--get-team-scoped"}},"/v1/integrations/vcs/repo-access":{"post":{"$ref":"#/components/pathItems/v1-integrations-vcs-repo-access-post"}},"/v1/teams/{teamId}/integrations/vcs/repo-access":{"post":{"$ref":"#/components/pathItems/v1-integrations-vcs-repo-access-post-team-scoped"}},"/v1/integrations/vcs/repos":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-repos-get"}},"/v1/teams/{teamId}/integrations/vcs/repos":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-repos-get-team-scoped"}},"/v1/integrations/vcs/repos/{vcsService}/{repositoryOwner}/{repositoryName}/branches":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-repos--vcsService---repositoryOwner---repositoryName--branches-get"}},"/v1/teams/{teamId}/integrations/vcs/repos/{vcsService}/{repositoryOwner}/{repositoryName}/branches":{"get":{"$ref":"#/components/pathItems/v1-integrations-vcs-repos--vcsService---repositoryOwner---repositoryName--branches-get-team-scoped"}},"/v1/load-balancers":{"get":{"$ref":"#/components/pathItems/v1-load-balancers-get"},"post":{"$ref":"#/components/pathItems/v1-load-balancers-post"},"put":{"$ref":"#/components/pathItems/v1-load-balancers-put"}},"/v1/teams/{teamId}/load-balancers":{"get":{"$ref":"#/components/pathItems/v1-load-balancers-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-load-balancers-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-load-balancers-put-team-scoped"}},"/v1/load-balancers/{loadBalancerId}":{"get":{"$ref":"#/components/pathItems/v1-load-balancers--loadBalancerId--get"},"patch":{"$ref":"#/components/pathItems/v1-load-balancers--loadBalancerId--patch"},"delete":{"$ref":"#/components/pathItems/v1-load-balancers--loadBalancerId--delete"}},"/v1/teams/{teamId}/load-balancers/{loadBalancerId}":{"get":{"$ref":"#/components/pathItems/v1-load-balancers--loadBalancerId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-load-balancers--loadBalancerId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-load-balancers--loadBalancerId--delete-team-scoped"}},"/v1/logs":{"get":{"$ref":"#/components/pathItems/v1-logs-get"}},"/v1/teams/{teamId}/logs":{"get":{"$ref":"#/components/pathItems/v1-logs-get-team-scoped"}},"/v1/network-policies":{"post":{"$ref":"#/components/pathItems/v1-network-policies-post"}},"/v1/teams/{teamId}/network-policies":{"post":{"$ref":"#/components/pathItems/v1-network-policies-post-team-scoped"}},"/v1/network-policies/{networkPolicyId}":{"get":{"$ref":"#/components/pathItems/v1-network-policies--networkPolicyId--get"},"patch":{"$ref":"#/components/pathItems/v1-network-policies--networkPolicyId--patch"},"delete":{"$ref":"#/components/pathItems/v1-network-policies--networkPolicyId--delete"}},"/v1/teams/{teamId}/network-policies/{networkPolicyId}":{"get":{"$ref":"#/components/pathItems/v1-network-policies--networkPolicyId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-network-policies--networkPolicyId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-network-policies--networkPolicyId--delete-team-scoped"}},"/v1/opentofu-jobs/{opentofuJobId}/logs":{"get":{"$ref":"#/components/pathItems/v1-opentofu-jobs--opentofuJobId--logs-get"}},"/v1/teams/{teamId}/opentofu-jobs/{opentofuJobId}/logs":{"get":{"$ref":"#/components/pathItems/v1-opentofu-jobs--opentofuJobId--logs-get-team-scoped"}},"/v1/org-members":{"get":{"operationId":"getOrgMembers","summary":"List org members","description":"Gets a list of members belonging to the authenticated org.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of members in the org.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID (username) of the org member. For users who are not finalized this ID may change on finalisation.","example":"john-doe"},"name":{"type":"string","description":"Display name from the member profile.","example":"John Doe"},"emails":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","example":"john@example.com"},"verified":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Email addresses of the member."},"description":"Email addresses of the member."},"joinedAt":{"type":"string","format":"date-time","description":"The time the member joined the org.","example":"2021-01-20T11:19:53.175Z"},"lastLoginTime":{"type":"string","format":"date-time","description":"The time the member last logged in.","example":"2021-01-20T11:19:53.175Z"},"finalized":{"type":"boolean","description":"Whether the account has been fully set up by the user."}},"required":["id","finalized"],"additionalProperties":false,"description":"An org member object."},"description":"An array of org members."}},"required":["members"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Members","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Members > Read","x-nf-org-scoped":true,"x-nf-cli-command":["list","org-members"]}},"/v1/org-roles":{"get":{"operationId":"getOrgRoles","summary":"List org roles","description":"Gets a list of platform roles for the authenticated org.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of platform roles for the org.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","restrictions"],"additionalProperties":false,"description":"An org role object."},"description":"An array of org roles."}},"required":["roles"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Roles > Read","x-nf-org-scoped":true,"x-nf-cli-command":["list","org-roles"]},"post":{"operationId":"postOrgRoles","summary":"Create org role","description":"Creates a new platform role for the authenticated org.","parameters":[],"responses":{"200":{"description":"Details about the newly created org role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level permissions."}},"required":["teamScope","projectScope","orgScope"],"additionalProperties":false}},"required":["id","name","restrictions","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the role.","example":"Developer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the role.","example":"Role for developers."},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level RBAC permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level RBAC permission strings.","default":[]},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level RBAC permission strings.","default":[]}},"additionalProperties":false,"description":"Permissions granted by this role.","default":{"teamScope":[],"projectScope":[],"orgScope":[]}},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false,"description":"Access restrictions for this role.","default":{"enabled":false}},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Organisation > Admin > Roles > Manage","x-nf-org-scoped":true,"x-nf-cli-command":["create","org-role"]},"put":{"operationId":"putOrgRoles","summary":"Create or update org role","description":"Creates role or updates all user-editable fields on a platform role for the authenticated org.","parameters":[],"responses":{"200":{"description":"Details about the updated org role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level permissions."}},"required":["teamScope","projectScope","orgScope"],"additionalProperties":false}},"required":["id","name","restrictions","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the role.","example":"Developer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the role.","example":"Role for developers."},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level RBAC permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level RBAC permission strings.","default":[]},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level RBAC permission strings.","default":[]}},"additionalProperties":false,"description":"Permissions granted by this role.","default":{"teamScope":[],"projectScope":[],"orgScope":[]}},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false,"description":"Access restrictions for this role.","default":{"enabled":false}},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Organisation > Admin > Roles > Manage","x-nf-org-scoped":true,"x-nf-cli-command":["put","org-role"]}},"/v1/org-roles/{roleId}":{"get":{"operationId":"getOrgRolesRoleid","summary":"Get org role","description":"Gets details about a specific org platform role.","parameters":[{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path"}}],"responses":{"200":{"description":"Details about the org role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level permissions."}},"required":["teamScope","projectScope","orgScope"],"additionalProperties":false}},"required":["id","name","restrictions","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Roles > Read","x-nf-org-scoped":true,"x-nf-cli-command":["get","org-role"]},"patch":{"operationId":"patchOrgRolesRoleid","summary":"Update org role","description":"Partially updates a platform role for the authenticated org.","parameters":[{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path"}}],"responses":{"200":{"description":"Details about the updated org role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level permissions."}},"required":["teamScope","projectScope","orgScope"],"additionalProperties":false}},"required":["id","name","restrictions","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the role.","example":"Role for developers."},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level RBAC permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level RBAC permission strings.","default":[]},"orgScope":{"type":"array","items":{"type":"string"},"description":"Org-level RBAC permission strings.","default":[]}},"additionalProperties":false,"description":"Permissions granted by this role."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"default":{"enabled":false,"projects":[]}}},"required":["teamId"],"additionalProperties":false},"default":[]}},"required":["enabled"],"additionalProperties":false,"description":"Access restrictions for this role."},"directoryGroups":{"type":"array","items":{"type":"string","description":"The ID of the linked directory group."},"description":"An array of linked directory groups. Users belonging to any of these linked directory groups will automatically be a member of this role."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Organisation > Admin > Roles > Manage","x-nf-org-scoped":true,"x-nf-cli-command":["patch","org-role"]},"delete":{"operationId":"deleteOrgRolesRoleid","summary":"Delete org role","description":"Deletes a platform role from the authenticated org.","parameters":[{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Roles > Manage","x-nf-org-scoped":true,"x-nf-cli-command":["delete","org-role"]}},"/v1/org-roles/{roleId}/members":{"get":{"operationId":"getOrgRolesRoleidMembers","summary":"List org role members","description":"Gets a list of members assigned to a platform role in the authenticated org.","parameters":[{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"type","type":"string","enum":["explicit","implicit"],"description":"Filter members by how they were added, directly or implicitly via directory group membership.","example":"explicit","in":"query","schema":{"name":"type","type":"string","enum":["explicit","implicit"],"description":"Filter members by how they were added, directly or implicitly via directory group membership.","example":"explicit","in":"query"}},{"name":"userIds","description":"Filter members by user ID. Specify the parameter multiple times to filter by multiple user IDs.","example":"john-doe","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"}},{"type":"string","pattern":"^[A-Za-z0-9-]+$"}]}}],"responses":{"200":{"description":"A list of members in the org role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID (username) of the org member. For users who are not finalized this ID may change on finalisation.","example":"john-doe"},"name":{"type":"string","description":"Display name from the member profile.","example":"John Doe"},"emails":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","example":"john@example.com"},"verified":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Email addresses of the member."},"description":"Email addresses of the member."},"joinedAt":{"type":"string","format":"date-time","description":"The time the member joined the org.","example":"2021-01-20T11:19:53.175Z"},"lastLoginTime":{"type":"string","format":"date-time","description":"The time the member last logged in.","example":"2021-01-20T11:19:53.175Z"},"finalized":{"type":"boolean","description":"Whether the account has been fully set up by the user."},"type":{"type":"string","enum":["explicit","implicit"],"description":"How the member was added to the role. `explicit` means manually added; `implicit` means provisioned via Directory Sync.","example":"explicit"}},"required":["id","finalized","type"],"additionalProperties":false,"description":"An org role member object."},"description":"An array of members in the org role."}},"required":["members"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Roles > Read","x-nf-org-scoped":true,"x-nf-cli-command":["list","org-role-members"]},"post":{"operationId":"postOrgRolesRoleidMembers","summary":"Add member to org role","description":"Adds a user to a platform role in the authenticated org.","parameters":[{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the user to add to this role.","example":"john-doe"}},"required":["userId"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Organisation > Admin > Roles > Manage","x-nf-org-scoped":true,"x-nf-cli-command":["create","org-role-member"]}},"/v1/org-roles/{roleId}/members/{memberId}":{"delete":{"operationId":"deleteOrgRolesRoleidMembersMemberid","summary":"Remove member from org role","description":"Removes a user from a platform role in the authenticated org.","parameters":[{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the org role","example":"developer","in":"path"}},{"name":"memberId","type":"string","required":true,"description":"ID of the org member.","example":"john-doe","in":"path","schema":{"name":"memberId","type":"string","required":true,"description":"ID of the org member.","example":"john-doe","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Org Roles","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Roles > Manage","x-nf-org-scoped":true,"x-nf-cli-command":["delete","org-role-member"]}},"/v1/plans":{"get":{"operationId":"getPlans","summary":"List plans","description":"Lists available billing plans","parameters":[],"responses":{"200":{"description":"A list of available plans.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the plan.","example":"nf-compute-20"},"name":{"type":"string","description":"The name of the plan.","example":"nf-compute-20"},"currency":{"type":"string","description":"The currency code of the currency used by this plan.","example":"usd"},"amountPerMonth":{"type":"number","format":"float","description":"The approximate monthly (30 days) cost of the plan.","example":4.4},"amountPerHour":{"type":"number","format":"float","description":"The hourly cost of the plan.","example":0.0061},"cpuResource":{"type":"number","format":"float","description":"The CPU resource of the plan, in vCPUs.","example":0.2},"ramResource":{"type":"number","format":"float","description":"The memory resource of the plan, in megabytes","example":512}},"required":["id","name","currency","amountPerMonth","amountPerHour","cpuResource","ramResource"],"additionalProperties":false,"description":"A plan object"},"description":"An array of available plans"}},"required":["plans"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Miscellaneous"],"security":[],"x-nf-cli-command":["list","plans"]}},"/v1/projects":{"get":{"$ref":"#/components/pathItems/v1-projects-get"},"post":{"$ref":"#/components/pathItems/v1-projects-post"},"put":{"$ref":"#/components/pathItems/v1-projects-put"}},"/v1/teams/{teamId}/projects":{"get":{"$ref":"#/components/pathItems/v1-projects-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects-put-team-scoped"}},"/v1/projects/{projectId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--patch"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--delete"}},"/v1/teams/{teamId}/projects/{projectId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--patch-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--delete-team-scoped"}},"/v1/projects/{projectId}/addons":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--addons-put"}},"/v1/teams/{teamId}/projects/{projectId}/addons":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--addons-put-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--get"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--patch"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--delete-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backup-schedules":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backup-schedules-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backup-schedules-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backup-schedules":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backup-schedules-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backup-schedules-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backup-schedules/{scheduleId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backup-schedules--scheduleId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backup-schedules/{scheduleId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backup-schedules--scheduleId--delete-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--delete-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--abort-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--abort-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/abort-restore":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--abort-restore-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/abort-restore":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--abort-restore-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/download-link":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--download-link-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/download-link":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--download-link-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--logs-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/restore":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--restore-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/restore":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--restore-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/restores":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--restores-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/restores":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--restores-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/restores/{restoreId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--restores--restoreId--logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/restores/{restoreId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--restores--restoreId--logs-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/backups/{backupId}/retain":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--retain-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/backups/{backupId}/retain":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--backups--backupId--retain-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/containers":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--containers-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/containers":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--containers-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/credentials":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--credentials-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/credentials":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--credentials-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/import":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--import-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/import":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--import-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--logs-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--metrics-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--metrics-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/network-settings":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--network-settings-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/network-settings":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--network-settings-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--pause-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--pause-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/reset":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--reset-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/reset":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--reset-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/restart":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--restart-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/restart":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--restart-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/restores":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--restores-get"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/restores":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--restores-get-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--resume-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--resume-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/scale":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--scale-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/scale":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--scale-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/secret-rotation":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--secret-rotation-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/secret-rotation":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--secret-rotation-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/secret-rotation/finalise":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--secret-rotation-finalise-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/secret-rotation/finalise":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--secret-rotation-finalise-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/security":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--security-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/security":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--security-post-team-scoped"}},"/v1/projects/{projectId}/addons/{addonId}/version":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--version-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--version-post"}},"/v1/teams/{teamId}/projects/{projectId}/addons/{addonId}/version":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--version-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--addons--addonId--version-post-team-scoped"}},"/v1/projects/{projectId}/external-addons":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons-post"}},"/v1/teams/{teamId}/projects/{projectId}/external-addons":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons-post-team-scoped"}},"/v1/projects/{projectId}/external-addons/{externalAddonId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons--externalAddonId--get"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons--externalAddonId--patch"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons--externalAddonId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/external-addons/{externalAddonId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons--externalAddonId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons--externalAddonId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--external-addons--externalAddonId--delete-team-scoped"}},"/v1/projects/{projectId}/harnesses":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses-put"}},"/v1/teams/{teamId}/projects/{projectId}/harnesses":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses-put-team-scoped"}},"/v1/projects/{projectId}/harnesses/{harnessId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--get"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--patch"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/harnesses/{harnessId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--delete-team-scoped"}},"/v1/projects/{projectId}/harnesses/{harnessId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/harnesses/{harnessId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--logs-get-team-scoped"}},"/v1/projects/{projectId}/harnesses/{harnessId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--pause-post"}},"/v1/teams/{teamId}/projects/{projectId}/harnesses/{harnessId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--pause-post-team-scoped"}},"/v1/projects/{projectId}/harnesses/{harnessId}/restart":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--restart-post"}},"/v1/teams/{teamId}/projects/{projectId}/harnesses/{harnessId}/restart":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--restart-post-team-scoped"}},"/v1/projects/{projectId}/harnesses/{harnessId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--resume-post"}},"/v1/teams/{teamId}/projects/{projectId}/harnesses/{harnessId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--harnesses--harnessId--resume-post-team-scoped"}},"/v1/projects/{projectId}/jobs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-put"}},"/v1/teams/{teamId}/projects/{projectId}/jobs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-put-team-scoped"}},"/v1/projects/{projectId}/jobs/cron":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-cron-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-cron-put"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/cron":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-cron-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-cron-put-team-scoped"}},"/v1/projects/{projectId}/jobs/cron/{jobId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-cron--jobId--patch"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/cron/{jobId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-cron--jobId--patch-team-scoped"}},"/v1/projects/{projectId}/jobs/manual":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-manual-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-manual-put"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/manual":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-manual-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-manual-put-team-scoped"}},"/v1/projects/{projectId}/jobs/manual/{jobId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-manual--jobId--patch"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/manual/{jobId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs-manual--jobId--patch-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--get"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--patch"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--delete-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/branches":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--branches-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/branches":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--branches-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build-arguments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-arguments-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-arguments-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build-arguments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-arguments-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-arguments-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build-arguments/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-arguments-details-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build-arguments/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-arguments-details-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build-logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build-logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-logs-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build-metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-metrics-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build-metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-metrics-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build-options":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-options-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build-options":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-options-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build-source":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-source-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build-source":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build-source-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/build/{buildId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build--buildId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build--buildId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/build/{buildId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build--buildId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--build--buildId--delete-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/containers":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--containers-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/containers":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--containers-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/deployment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--deployment-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--deployment-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/deployment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--deployment-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--deployment-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/health-checks":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--health-checks-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--health-checks-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/health-checks":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--health-checks-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--health-checks-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--logs-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--metrics-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--metrics-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--pause-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--pause-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/pull-requests":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--pull-requests-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/pull-requests":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--pull-requests-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--resume-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--resume-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/runs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/runs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs--runId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs--runId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs--runId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runs--runId--delete-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/runtime-environment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runtime-environment-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runtime-environment-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/runtime-environment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runtime-environment-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runtime-environment-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/runtime-environment/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runtime-environment-details-get"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/runtime-environment/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--runtime-environment-details-get-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/scale":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--scale-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/scale":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--scale-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/settings":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--settings-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/settings":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--settings-post-team-scoped"}},"/v1/projects/{projectId}/jobs/{jobId}/suspend":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--suspend-post"}},"/v1/teams/{teamId}/projects/{projectId}/jobs/{jobId}/suspend":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--jobs--jobId--suspend-post-team-scoped"}},"/v1/projects/{projectId}/llm-model-deployments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments-post"}},"/v1/teams/{teamId}/projects/{projectId}/llm-model-deployments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments-post-team-scoped"}},"/v1/projects/{projectId}/llm-model-deployments/{llmModelDeploymentId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--post"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/llm-model-deployments/{llmModelDeploymentId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--delete-team-scoped"}},"/v1/projects/{projectId}/pipelines":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines-get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines-get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/preview-envs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-post"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/preview-envs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-post-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/preview-envs/previews":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-previews-get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/preview-envs/previews":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-previews-get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/preview-envs/previews/{previewId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-previews--previewId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/preview-envs/previews/{previewId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-previews--previewId--delete-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/preview-envs/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-post"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/preview-envs/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/preview-envs/runs/{templateRunId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-runs--templateRunId--get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/preview-envs/runs/{templateRunId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--preview-envs-runs--templateRunId--get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--post"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--post-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-post"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--get"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--get-team-scoped"}},"/v1/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}/runs/{runId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--abort-post"}},"/v1/teams/{teamId}/projects/{projectId}/pipelines/{pipelineId}/release-flows/{stage}/runs/{runId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--abort-post-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints-post"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints-post-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--post"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--delete-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews-get"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews-get-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--delete-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--pause-post"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--pause-post-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}/reset":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--reset-post"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}/reset":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--reset-post-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--resume-post"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/previews/{previewId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--resume-post-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-post"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-get"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-get-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--get"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--get-team-scoped"}},"/v1/projects/{projectId}/preview-blueprints/{previewBlueprintId}/runs/{runId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--abort-post"}},"/v1/teams/{teamId}/projects/{projectId}/preview-blueprints/{previewBlueprintId}/runs/{runId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--abort-post-team-scoped"}},"/v1/projects/{projectId}/secrets":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets-put"}},"/v1/teams/{teamId}/projects/{projectId}/secrets":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets-put-team-scoped"}},"/v1/projects/{projectId}/secrets/{secretId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--patch"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--delete"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--post"}},"/v1/teams/{teamId}/projects/{projectId}/secrets/{secretId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--patch-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--delete-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--post-team-scoped"}},"/v1/projects/{projectId}/secrets/{secretId}/addons/{addonId}":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--addons--addonId--post"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--addons--addonId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--addons--addonId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/secrets/{secretId}/addons/{addonId}":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--addons--addonId--post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--addons--addonId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--addons--addonId--delete-team-scoped"}},"/v1/projects/{projectId}/secrets/{secretId}/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--details-get"}},"/v1/teams/{teamId}/projects/{projectId}/secrets/{secretId}/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--secrets--secretId--details-get-team-scoped"}},"/v1/projects/{projectId}/services":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services-get"}},"/v1/teams/{teamId}/projects/{projectId}/services":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services-get-team-scoped"}},"/v1/projects/{projectId}/services/build":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services-build-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--services-build-put"}},"/v1/teams/{teamId}/projects/{projectId}/services/build":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services-build-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--services-build-put-team-scoped"}},"/v1/projects/{projectId}/services/build/{serviceId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--services-build--serviceId--patch"}},"/v1/teams/{teamId}/projects/{projectId}/services/build/{serviceId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--services-build--serviceId--patch-team-scoped"}},"/v1/projects/{projectId}/services/combined":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services-combined-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--services-combined-put"}},"/v1/teams/{teamId}/projects/{projectId}/services/combined":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services-combined-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--services-combined-put-team-scoped"}},"/v1/projects/{projectId}/services/combined/{serviceId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--services-combined--serviceId--patch"}},"/v1/teams/{teamId}/projects/{projectId}/services/combined/{serviceId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--services-combined--serviceId--patch-team-scoped"}},"/v1/projects/{projectId}/services/deployment":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services-deployment-post"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--services-deployment-put"}},"/v1/teams/{teamId}/projects/{projectId}/services/deployment":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services-deployment-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-projects--projectId--services-deployment-put-team-scoped"}},"/v1/projects/{projectId}/services/deployment/{serviceId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--services-deployment--serviceId--patch"}},"/v1/teams/{teamId}/projects/{projectId}/services/deployment/{serviceId}":{"patch":{"$ref":"#/components/pathItems/v1-projects--projectId--services-deployment--serviceId--patch-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--delete-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/branches":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--branches-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/branches":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--branches-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-arguments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-arguments-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-arguments-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-arguments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-arguments-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-arguments-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-arguments/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-arguments-details-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-arguments/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-arguments-details-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-cache":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-cache-delete"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-cache":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-cache-delete-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-logs-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-metrics-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-metrics-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-options":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-options-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-options":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-options-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build-source":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-source-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build-source":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build-source-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/build/{buildId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build--buildId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build--buildId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/build/{buildId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build--buildId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--build--buildId--delete-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/containers":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--containers-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/containers":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--containers-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/deployment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--deployment-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--deployment-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/deployment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--deployment-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--deployment-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/deployments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--deployments-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/deployments":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--deployments-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/health-checks":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--health-checks-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--health-checks-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/health-checks":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--health-checks-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--health-checks-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--logs-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/logs":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--logs-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--metrics-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/metrics":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--metrics-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--pause-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/pause":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--pause-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/per-replica-volumes":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--per-replica-volumes-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/per-replica-volumes":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--per-replica-volumes-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/per-replica-volumes/volume/{volumeId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/per-replica-volumes/volume/{volumeId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--delete-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/per-replica-volumes/volume/{volumeId}/replica/{ordinal}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--replica--ordinal--delete"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/per-replica-volumes/volume/{volumeId}/replica/{ordinal}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--replica--ordinal--delete-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/ports":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--ports-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--ports-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/ports":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--ports-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--ports-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/pull-requests":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--pull-requests-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/pull-requests":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--pull-requests-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/restart":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--restart-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/restart":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--restart-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--resume-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/resume":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--resume-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/rollout":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/rollout":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/rollout/configuration":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-configuration-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/rollout/configuration":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-configuration-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/rollout/promote":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-promote-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/rollout/promote":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-promote-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/rollout/rollback":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-rollback-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/rollout/rollback":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--rollout-rollback-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/runtime-environment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--runtime-environment-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--runtime-environment-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/runtime-environment":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--runtime-environment-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--runtime-environment-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/runtime-environment/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--runtime-environment-details-get"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/runtime-environment/details":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--runtime-environment-details-get-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/scale":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--scale-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/scale":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--scale-post-team-scoped"}},"/v1/projects/{projectId}/services/{serviceId}/snapshots":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--snapshots-post"}},"/v1/teams/{teamId}/projects/{projectId}/services/{serviceId}/snapshots":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--services--serviceId--snapshots-post-team-scoped"}},"/v1/projects/{projectId}/volumes":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes-post"}},"/v1/teams/{teamId}/projects/{projectId}/volumes":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes-post-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--post"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--delete-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}/attach":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--attach-post"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}/attach":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--attach-post-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}/backup-schedules":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backup-schedules-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backup-schedules-post"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}/backup-schedules":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backup-schedules-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backup-schedules-post-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}/backup-schedules/{scheduleId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backup-schedules--scheduleId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}/backup-schedules/{scheduleId}":{"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backup-schedules--scheduleId--delete-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}/backups":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups-post"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}/backups":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups-post-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}/backups/{backupId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups--backupId--get"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups--backupId--delete"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}/backups/{backupId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups--backupId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--backups--backupId--delete-team-scoped"}},"/v1/projects/{projectId}/volumes/{volumeId}/detach":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--detach-post"}},"/v1/teams/{teamId}/projects/{projectId}/volumes/{volumeId}/detach":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--volumes--volumeId--detach-post-team-scoped"}},"/v1/projects/{projectId}/workflows":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows-get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows-post"}},"/v1/teams/{teamId}/projects/{projectId}/workflows":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows-post-team-scoped"}},"/v1/projects/{projectId}/workflows/{workflowId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--get"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--post"}},"/v1/teams/{teamId}/projects/{projectId}/workflows/{workflowId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--post-team-scoped"}},"/v1/projects/{projectId}/workflows/{workflowId}/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs-post"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs-get"}},"/v1/teams/{teamId}/projects/{projectId}/workflows/{workflowId}/runs":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs-post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs-get-team-scoped"}},"/v1/projects/{projectId}/workflows/{workflowId}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs--runId--get"}},"/v1/teams/{teamId}/projects/{projectId}/workflows/{workflowId}/runs/{runId}":{"get":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs--runId--get-team-scoped"}},"/v1/projects/{projectId}/workflows/{workflowId}/runs/{runId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs--runId--abort-post"}},"/v1/teams/{teamId}/projects/{projectId}/workflows/{workflowId}/runs/{runId}/abort":{"post":{"$ref":"#/components/pathItems/v1-projects--projectId--workflows--workflowId--runs--runId--abort-post-team-scoped"}},"/v1/regions":{"get":{"operationId":"getRegions","summary":"List regions","description":"Lists available project regions","parameters":[],"responses":{"200":{"description":"A list of available regions.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the region.","example":"europe-west"},"name":{"type":"string","description":"The name of the region.","example":"Europe - West"},"regionName":{"type":"string","description":"The name of the group this region belongs to.","example":"EMEA"},"provider":{"type":"object","properties":{"id":{"type":"string"},"region":{"type":"string"}},"required":["id","region"],"additionalProperties":false},"gpuDevices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the GPU device.","example":"h100-80"},"name":{"type":"string","description":"The name of the GPU device.","example":"H100"},"manufacturer":{"type":"string","description":"The manufacturer of the GPU.","example":"NVIDIA"},"memoryInfo":{"type":"object","properties":{"sizeInMiB":{"type":"number","format":"float","description":"The size of the GPU memory in MiB.","example":81920}},"required":["sizeInMiB"],"additionalProperties":false},"countOptions":{"type":"array","items":{"type":"number","format":"float"},"description":"The list of available configurations for GPU count.","example":[1,2,4,8]},"pricing":{"type":"object","properties":{"onDemand":{"type":"number","format":"float","description":"The price per hour for on-demand usage, in US¢.","example":274}},"required":["onDemand"],"additionalProperties":false}},"required":["id","name","manufacturer","countOptions","pricing"],"additionalProperties":false},"description":"The list of GPUs available in this region."}},"required":["id","name","regionName","gpuDevices"],"additionalProperties":false,"description":"A region object"},"description":"An array of regions"}},"required":["regions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Miscellaneous"],"security":[],"x-nf-cli-command":["list","regions"]}},"/v1/secrets":{"get":{"$ref":"#/components/pathItems/v1-secrets-get"},"post":{"$ref":"#/components/pathItems/v1-secrets-post"},"put":{"$ref":"#/components/pathItems/v1-secrets-put"}},"/v1/teams/{teamId}/secrets":{"get":{"$ref":"#/components/pathItems/v1-secrets-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-secrets-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-secrets-put-team-scoped"}},"/v1/secrets/{secretId}":{"patch":{"$ref":"#/components/pathItems/v1-secrets--secretId--patch"},"get":{"$ref":"#/components/pathItems/v1-secrets--secretId--get"},"delete":{"$ref":"#/components/pathItems/v1-secrets--secretId--delete"}},"/v1/teams/{teamId}/secrets/{secretId}":{"patch":{"$ref":"#/components/pathItems/v1-secrets--secretId--patch-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-secrets--secretId--get-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-secrets--secretId--delete-team-scoped"}},"/v1/secrets/{secretId}/trigger-dependents":{"post":{"$ref":"#/components/pathItems/v1-secrets--secretId--trigger-dependents-post"}},"/v1/teams/{teamId}/secrets/{secretId}/trigger-dependents":{"post":{"$ref":"#/components/pathItems/v1-secrets--secretId--trigger-dependents-post-team-scoped"}},"/v1/tags":{"get":{"$ref":"#/components/pathItems/v1-tags-get"},"post":{"$ref":"#/components/pathItems/v1-tags-post"},"put":{"$ref":"#/components/pathItems/v1-tags-put"}},"/v1/teams/{teamId}/tags":{"get":{"$ref":"#/components/pathItems/v1-tags-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-tags-post-team-scoped"},"put":{"$ref":"#/components/pathItems/v1-tags-put-team-scoped"}},"/v1/tags/{resourceTagId}":{"get":{"$ref":"#/components/pathItems/v1-tags--resourceTagId--get"},"patch":{"$ref":"#/components/pathItems/v1-tags--resourceTagId--patch"},"delete":{"$ref":"#/components/pathItems/v1-tags--resourceTagId--delete"}},"/v1/teams/{teamId}/tags/{resourceTagId}":{"get":{"$ref":"#/components/pathItems/v1-tags--resourceTagId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-tags--resourceTagId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-tags--resourceTagId--delete-team-scoped"}},"/v1/teams":{"post":{"operationId":"postTeams","summary":"Create team","description":"Creates a new team belonging to the authenticated org.","parameters":[],"responses":{"200":{"description":"Details about the newly created team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the team.","example":"my-team"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Display name of the team.","example":"My Team"},"description":{"type":"string","description":"Description of the team.","example":"This is my team."},"createdAt":{"type":"string","format":"date-time","description":"The time the team was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the team was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Teams","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](('[a-zA-Z])?(-|\\s)?[a-zA-Z0-9]+(('[a-zA-Z])?(-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The name of the team.","example":"My Team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the team.","example":"This is my team."},"email":{"type":"string","pattern":"^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$","description":"The billing email address for the team.","example":"billing@example.com"}},"required":["name","email"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Organisation > Team > General > Create","x-nf-org-scoped":true,"x-nf-cli-command":["create","team"]},"get":{"operationId":"getTeams","summary":"List teams","description":"Gets a list of teams belonging to the authenticated org.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of teams belonging to the org.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the team.","example":"my-team"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Display name of the team.","example":"My Team"},"description":{"type":"string","description":"Description of the team.","example":"This is my team."},"createdAt":{"type":"string","format":"date-time","description":"The time the team was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","uid","name","createdAt"],"additionalProperties":false,"description":"A team object."},"description":"An array of teams."}},"required":["teams"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Teams","org"],"security":[],"x-nf-permission-required":"Organisation > Team > General > Read","x-nf-org-scoped":true,"x-nf-cli-command":["list","teams"]}},"/v1/teams/{teamId}":{"get":{"operationId":"getTeamsTeamid","summary":"Get team","description":"Gets information about a team belonging to the authenticated org.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}}],"responses":{"200":{"description":"Details about the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the team.","example":"my-team"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Display name of the team.","example":"My Team"},"description":{"type":"string","description":"Description of the team.","example":"This is my team."},"createdAt":{"type":"string","format":"date-time","description":"The time the team was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the team was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Teams","org"],"security":[],"x-nf-permission-required":"Organisation > Team > General > Read","x-nf-org-scoped":true,"x-nf-cli-command":["get","team"]},"patch":{"operationId":"patchTeamsTeamid","summary":"Update team","description":"Updates the description of a team belonging to the authenticated org.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}}],"responses":{"200":{"description":"Details about the updated team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the team.","example":"my-team"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Display name of the team.","example":"My Team"},"description":{"type":"string","description":"Description of the team.","example":"This is my team."},"createdAt":{"type":"string","format":"date-time","description":"The time the team was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the team was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Teams","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the team.","example":"This is my team."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Organisation > Team > General > Update","x-nf-org-scoped":true,"x-nf-cli-command":["patch","team"]},"delete":{"operationId":"deleteTeamsTeamid","summary":"Delete team","description":"Deletes a team belonging to the authenticated org.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The team couldn't be deleted as it has dependencies that have not been deleted."}},"tags":["Teams","org"],"security":[],"x-nf-permission-required":"Organisation > Team > General > Delete","x-nf-org-scoped":true,"x-nf-cli-command":["delete","team"]}},"/v1/teams/{teamId}/members":{"get":{"operationId":"getMembers","summary":"List team members","description":"Gets a list of members belonging to a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of members in the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true,"description":"ID (username) of the team member. For users who are not finalized this ID may change on finalisation.","example":"john-doe"},"name":{"type":"string","description":"Display name from the member profile.","example":"John Doe"},"emails":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","format":"email","example":"john@example.com"},"verified":{"type":"boolean","example":true}},"required":["address","verified"],"additionalProperties":false},"description":"Email addresses of the member."},"joinedAt":{"type":"string","format":"date-time","description":"The time the member joined the team.","example":"2021-01-20T11:19:53.175Z"},"lastLoginTime":{"type":"string","format":"date-time","description":"The time the member last logged in.","example":"2021-01-20T11:19:53.175Z"},"finalized":{"type":"boolean","description":"Whether the account has been fully set up by the user."}},"required":["id"],"additionalProperties":false,"description":"A team member object."},"description":"An array of team members."}},"required":["members"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Members","team"],"security":[],"x-nf-permission-required":"Account > Admin > Members > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","team-members"]},"post":{"operationId":"postMembers","summary":"Invite team member","description":"Invites a user to a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Members","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","pattern":"^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$","description":"Email of the user to invite.","example":"user@example.com"},"roles":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Role IDs to assign to the invited member."}},"required":["email"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Members > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["create","team-member-invite"]}},"/v1/teams/{teamId}/members/{memberId}":{"delete":{"operationId":"deleteMembersMemberid","summary":"Remove team member","description":"Removes a member from a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"memberId","type":"string","required":true,"description":"ID of the team member.","example":"john-doe","in":"path","schema":{"name":"memberId","type":"string","required":true,"description":"ID of the team member.","example":"john-doe","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Members","team"],"security":[],"x-nf-permission-required":"Account > Admin > Members > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["delete","team-member"]}},"/v1/teams/{teamId}/roles":{"get":{"operationId":"getRoles","summary":"List team roles","description":"Gets a list of platform roles for a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of platform roles for the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name"],"additionalProperties":false,"description":"A team role object."},"description":"An array of team roles."}},"required":["roles"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"x-nf-permission-required":"Account > Admin > Roles > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","team-roles"]},"post":{"operationId":"postRoles","summary":"Create team role","description":"Creates a new platform role for a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}}],"responses":{"200":{"description":"Details about the newly created team role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."}},"required":["teamScope","projectScope"],"additionalProperties":false}},"required":["id","name","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the role.","example":"Developer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the role.","example":"Role for developers."},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level RBAC permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level RBAC permission strings.","default":[]}},"additionalProperties":false,"description":"Permissions granted by this role.","default":{"teamScope":[],"projectScope":[]}},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"description":"Project access restrictions for this role.","default":{"enabled":false,"projects":[]}}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Roles > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["create","team-role"]},"put":{"operationId":"putRoles","summary":"Create or update role","description":"Creates role or updates all user-editable fields on a platform role.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}}],"responses":{"200":{"description":"Details about the updated team role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."}},"required":["teamScope","projectScope"],"additionalProperties":false}},"required":["id","name","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the role.","example":"Developer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the role.","example":"Role for developers."},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level RBAC permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level RBAC permission strings.","default":[]}},"additionalProperties":false,"description":"Permissions granted by this role.","default":{"teamScope":[],"projectScope":[]}},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"description":"Project access restrictions for this role.","default":{"enabled":false,"projects":[]}}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Roles > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["put","team-role"]}},"/v1/teams/{teamId}/roles/{roleId}":{"get":{"operationId":"getRolesRoleid","summary":"Get team role","description":"Gets details about a specific platform role.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path"}}],"responses":{"200":{"description":"Details about the team role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."}},"required":["teamScope","projectScope"],"additionalProperties":false}},"required":["id","name","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"x-nf-permission-required":"Account > Admin > Roles > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","team-role"]},"patch":{"operationId":"patchRolesRoleid","summary":"Update team role","description":"Updates a platform role for a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path"}}],"responses":{"200":{"description":"Details about the updated team role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the role.","example":"developer"},"name":{"type":"string","description":"Display name of the role.","example":"Developer"},"description":{"type":"string","description":"Description of the role.","example":"Role for developers."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"Creation time.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated.","example":"2021-01-20T11:19:53.175Z"},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level permissions."},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level permissions."}},"required":["teamScope","projectScope"],"additionalProperties":false}},"required":["id","name","permissions"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the role.","example":"Role for developers."},"permissions":{"type":"object","properties":{"teamScope":{"type":"array","items":{"type":"string"},"description":"Team-level RBAC permission strings.","default":[]},"projectScope":{"type":"array","items":{"type":"string"},"description":"Project-level RBAC permission strings.","default":[]}},"additionalProperties":false,"description":"Permissions granted by this role."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean"},"projects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"default":[]},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled"],"additionalProperties":false,"description":"Project access restrictions for this role."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Roles > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["patch","team-role"]},"delete":{"operationId":"deleteRolesRoleid","summary":"Delete team role","description":"Deletes a platform role from a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"x-nf-permission-required":"Account > Admin > Roles > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["delete","team-role"]}},"/v1/teams/{teamId}/roles/{roleId}/members":{"get":{"operationId":"getRolesRoleidMembers","summary":"List team role members","description":"Gets a list of members assigned to a platform role in a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"userIds","description":"Filter members by user ID. Specify the parameter multiple times to filter by multiple user IDs.","example":"john-doe","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"}},{"type":"string","pattern":"^[A-Za-z0-9-]+$"}]}}],"responses":{"200":{"description":"A list of members in the team role.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true,"description":"ID (username) of the team member. For users who are not finalized this ID may change on finalisation.","example":"john-doe"},"name":{"type":"string","description":"Display name from the member profile.","example":"John Doe"},"emails":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","format":"email","example":"john@example.com"},"verified":{"type":"boolean","example":true}},"required":["address","verified"],"additionalProperties":false},"description":"Email addresses of the member."},"joinedAt":{"type":"string","format":"date-time","description":"The time the member joined the team.","example":"2021-01-20T11:19:53.175Z"},"lastLoginTime":{"type":"string","format":"date-time","description":"The time the member last logged in.","example":"2021-01-20T11:19:53.175Z"},"finalized":{"type":"boolean","description":"Whether the account has been fully set up by the user."}},"required":["id"],"additionalProperties":false,"description":"A team role member object."},"description":"An array of members in the team role."}},"required":["members"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"x-nf-permission-required":"Account > Admin > Roles > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","team-role-members"]},"post":{"operationId":"postRolesRoleidMembers","summary":"Add member to team role","description":"Adds a user to a platform role in a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the user to add to this role.","example":"john-doe"}},"required":["userId"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Roles > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["create","team-role-member"]}},"/v1/teams/{teamId}/roles/{roleId}/members/{memberId}":{"delete":{"operationId":"deleteRolesRoleidMembersMemberid","summary":"Remove member from team role","description":"Removes a user from a platform role in a team.","parameters":[{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path","schema":{"name":"teamId","type":"string","required":true,"description":"ID of the team","example":"my-team","in":"path"}},{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path","schema":{"name":"roleId","type":"string","required":true,"description":"ID of the team role","example":"developer","in":"path"}},{"name":"memberId","type":"string","required":true,"description":"ID of the team member.","example":"john-doe","in":"path","schema":{"name":"memberId","type":"string","required":true,"description":"ID of the team member.","example":"john-doe","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Team Roles","team"],"security":[],"x-nf-permission-required":"Account > Admin > Roles > Manage","x-nf-team-scoped":true,"x-nf-cli-command":["delete","team-role-member"]}},"/v1/templates":{"get":{"$ref":"#/components/pathItems/v1-templates-get"},"post":{"$ref":"#/components/pathItems/v1-templates-post"}},"/v1/teams/{teamId}/templates":{"get":{"$ref":"#/components/pathItems/v1-templates-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-templates-post-team-scoped"}},"/v1/templates/{templateId}":{"get":{"$ref":"#/components/pathItems/v1-templates--templateId--get"},"post":{"$ref":"#/components/pathItems/v1-templates--templateId--post"},"delete":{"$ref":"#/components/pathItems/v1-templates--templateId--delete"}},"/v1/teams/{teamId}/templates/{templateId}":{"get":{"$ref":"#/components/pathItems/v1-templates--templateId--get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-templates--templateId--post-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-templates--templateId--delete-team-scoped"}},"/v1/templates/{templateId}/opentofu/import-state":{"post":{"$ref":"#/components/pathItems/v1-templates--templateId--opentofu-import-state-post"}},"/v1/teams/{teamId}/templates/{templateId}/opentofu/import-state":{"post":{"$ref":"#/components/pathItems/v1-templates--templateId--opentofu-import-state-post-team-scoped"}},"/v1/templates/{templateId}/runs":{"post":{"$ref":"#/components/pathItems/v1-templates--templateId--runs-post"},"get":{"$ref":"#/components/pathItems/v1-templates--templateId--runs-get"}},"/v1/teams/{teamId}/templates/{templateId}/runs":{"post":{"$ref":"#/components/pathItems/v1-templates--templateId--runs-post-team-scoped"},"get":{"$ref":"#/components/pathItems/v1-templates--templateId--runs-get-team-scoped"}},"/v1/templates/{templateId}/runs/{templateRunId}":{"get":{"$ref":"#/components/pathItems/v1-templates--templateId--runs--templateRunId--get"}},"/v1/teams/{teamId}/templates/{templateId}/runs/{templateRunId}":{"get":{"$ref":"#/components/pathItems/v1-templates--templateId--runs--templateRunId--get-team-scoped"}},"/v1/templates/{templateId}/runs/{templateRunId}/abort":{"post":{"$ref":"#/components/pathItems/v1-templates--templateId--runs--templateRunId--abort-post"}},"/v1/teams/{teamId}/templates/{templateId}/runs/{templateRunId}/abort":{"post":{"$ref":"#/components/pathItems/v1-templates--templateId--runs--templateRunId--abort-post-team-scoped"}},"/v1/tokens":{"get":{"$ref":"#/components/pathItems/v1-tokens-get"}},"/v1/teams/{teamId}/tokens":{"get":{"$ref":"#/components/pathItems/v1-tokens-get-team-scoped"}},"/v1/tokens/{tokenId}/keys":{"post":{"$ref":"#/components/pathItems/v1-tokens--tokenId--keys-post"}},"/v1/teams/{teamId}/tokens/{tokenId}/keys":{"post":{"$ref":"#/components/pathItems/v1-tokens--tokenId--keys-post-team-scoped"}},"/v1/tokens/{tokenId}/keys/{keyId}":{"delete":{"$ref":"#/components/pathItems/v1-tokens--tokenId--keys--keyId--delete"}},"/v1/teams/{teamId}/tokens/{tokenId}/keys/{keyId}":{"delete":{"$ref":"#/components/pathItems/v1-tokens--tokenId--keys--keyId--delete-team-scoped"}},"/v1/workload-identities":{"get":{"$ref":"#/components/pathItems/v1-workload-identities-get"},"post":{"$ref":"#/components/pathItems/v1-workload-identities-post"}},"/v1/teams/{teamId}/workload-identities":{"get":{"$ref":"#/components/pathItems/v1-workload-identities-get-team-scoped"},"post":{"$ref":"#/components/pathItems/v1-workload-identities-post-team-scoped"}},"/v1/workload-identities/{workloadIdentityId}":{"get":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--get"},"patch":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--patch"},"delete":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--delete"}},"/v1/teams/{teamId}/workload-identities/{workloadIdentityId}":{"get":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--get-team-scoped"},"patch":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--patch-team-scoped"},"delete":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--delete-team-scoped"}},"/v1/workload-identities/{workloadIdentityId}/install":{"post":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--install-post"}},"/v1/teams/{teamId}/workload-identities/{workloadIdentityId}/install":{"post":{"$ref":"#/components/pathItems/v1-workload-identities--workloadIdentityId--install-post-team-scoped"}}},"responses":{},"definitions":{},"tags":[{"name":"Projects"},{"name":"Services"},{"name":"Domains"},{"name":"Jobs"},{"name":"Addons"},{"name":"AI Models"},{"name":"Secrets"},{"name":"Volumes"},{"name":"Templates"},{"name":"Workflows"},{"name":"Preview Blueprints"},{"name":"Pipelines"},{"name":"Integrations"},{"name":"Cloud Providers"},{"name":"Encryption Configurations"},{"name":"Load Balancers"},{"name":"Egress IPs"},{"name":"Rollout Strategies"},{"name":"OpenTofu"},{"name":"Tags"},{"name":"Billing"},{"name":"Backup Destinations"},{"name":"Miscellaneous"},{"name":"Auth"},{"name":"team"},{"name":"org"},{"name":"Org Roles"},{"name":"Org Members"},{"name":"Teams"},{"name":"Team Members"},{"name":"Team Roles"},{"name":"Container Snapshots"},{"name":"Network Policies"},{"name":"project"},{"name":"External Addons"},{"name":"Harnesses"},{"name":"API Tokens"}],"openapi":"3.0.1","servers":[{"url":"https://placeholder/v1","description":"Production API"}],"components":{"schemas":{"V1ReleaseFlowRichInputSchema":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["BranchCommitSelector"],"description":"The kind of input.","example":"BranchCommitSelector"},"spec":{"type":"object","properties":{"title":{"type":"string","description":"The title displayed for the input."},"description":{"type":"string","description":"The description displayed for the input."},"required":{"type":"boolean","description":"If true, an error will be displayed if this input is not provided a value.","example":false},"inputs":{"type":"object","properties":{"source":{"type":"string","description":"The ID of the build service to use for this input.","example":"build-service"}},"required":["source"],"additionalProperties":false,"description":"Inputs for the rich input node"},"outputs":{"type":"object","properties":{"branch":{"type":"string","example":"TARGET_BRANCH"},"buildSha":{"type":"string","example":"TARGET_COMMIT"}},"additionalProperties":false,"description":"Outputs for the rich input node. The value of each field corresponds to the argument name to be passed to the template."}},"required":["title","inputs","outputs"],"additionalProperties":false,"description":"The specification for the BranchCommitSelector input."}},"required":["kind","spec"],"additionalProperties":false,"description":"BranchCommitSelector input"},{"type":"object","properties":{"kind":{"type":"string","enum":["BuildSelector"],"description":"The kind of input.","example":"BuildSelector"},"spec":{"type":"object","properties":{"title":{"type":"string","description":"The title displayed for the input."},"description":{"type":"string","description":"The description displayed for the input."},"required":{"type":"boolean","description":"If true, an error will be displayed if this input is not provided a value.","example":false},"inputs":{"type":"object","properties":{"source":{"type":"string","description":"The ID of the build service to use for this input.","example":"build-service"}},"required":["source"],"additionalProperties":false,"description":"Inputs for the rich input node"},"outputs":{"type":"object","properties":{"branch":{"type":"string","example":"TARGET_BRANCH"},"buildId":{"type":"string","example":"TARGET_BUILD"},"buildSha":{"type":"string","example":"TARGET_COMMIT"}},"additionalProperties":false,"description":"Outputs for the rich input node. The value of each field corresponds to the argument name to be passed to the template."}},"required":["title","inputs","outputs"],"additionalProperties":false,"description":"The specification for the BuildSelector input."}},"required":["kind","spec"],"additionalProperties":false,"description":"BuildSelector input"}],"description":"A node representing a rich UI override for the Release Flow template."},"V1ReleaseFlowTemplateNodeSchema":{"type":"object"},"V1TeardownNodeSchema":{"type":"object"},"V1ReleaseFlowTemplateNodeRunSchema":{"type":"object"},"V1PreviewEnvTemplateNodeSchema":{"type":"object"},"V1TemplateNodeSchema":{"type":"object"},"V1PreviewEnvTemplateNodeRunSchema":{"type":"object"},"V1TemplateNodeRunSchema":{"type":"object"}},"pathItems":{"v1-backup-destinations-get":{"operationId":"getBackupDestinations","summary":"List backup destinations","description":"Lists the backup destinations saved to this account. Does not display secrets.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of backup destination saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"backupDestinations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."}},"required":["name","type","usage","prefix","credentials"],"additionalProperties":false},"description":"List of backup destinations."}},"required":["backupDestinations"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","backup-destinations"]},"v1-backup-destinations-get-team-scoped":{"operationId":"getBackupDestinations","summary":"List backup destinations","description":"Lists the backup destinations saved to this account. Does not display secrets.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of backup destination saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"backupDestinations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."}},"required":["name","type","usage","prefix","credentials"],"additionalProperties":false},"description":"List of backup destinations."}},"required":["backupDestinations"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations","team"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","backup-destinations"]},"v1-backup-destinations-post":{"operationId":"postBackupDestinations","summary":"Add backup destination","description":"Adds a new backup destination to this account.","parameters":[],"responses":{"200":{"description":"Data about the newly created backup destination.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."},"id":{"type":"string","description":"Identifier for the backup destination","example":"example-backup-destination"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","usage","prefix","credentials","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."}},"required":["name","type","usage","prefix","credentials"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > BackupDestinations > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","backup-destination"]},"v1-backup-destinations-post-team-scoped":{"operationId":"postBackupDestinations","summary":"Add backup destination","description":"Adds a new backup destination to this account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Data about the newly created backup destination.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."},"id":{"type":"string","description":"Identifier for the backup destination","example":"example-backup-destination"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","usage","prefix","credentials","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."}},"required":["name","type","usage","prefix","credentials"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > BackupDestinations > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","backup-destination"]},"v1-backup-destinations--backupDestinationId--get":{"operationId":"getBackupDestinationsBackupdestinationid","summary":"Get backup destination","description":"View a backup destination, including secrets.","parameters":[{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}}],"responses":{"200":{"description":"Details of the backup destination.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."},"id":{"type":"string","description":"Identifier for the backup destination","example":"example-backup-destination"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","usage","prefix","credentials","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","backup-destination"]},"v1-backup-destinations--backupDestinationId--get-team-scoped":{"operationId":"getBackupDestinationsBackupdestinationid","summary":"Get backup destination","description":"View a backup destination, including secrets.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}}],"responses":{"200":{"description":"Details of the backup destination.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"type":{"type":"string","enum":["s3"],"description":"Type of the backup destination.","default":"s3"},"usage":{"type":"string","enum":["globalBackups","containerSnapshots"],"description":"The backup workload that can use this destination.","default":"globalBackups"},"prefix":{"type":"string","pattern":"^([a-zA-Z0-9-_]+)\\/$","description":"A prefix path to add to the bucket objects if not writing to /"},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."},"id":{"type":"string","description":"Identifier for the backup destination","example":"example-backup-destination"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","usage","prefix","credentials","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations","team"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","backup-destination"]},"v1-backup-destinations--backupDestinationId--patch":{"operationId":"patchBackupDestinationsBackupdestinationid","summary":"Patch backup destination","description":"Updates a backup destination.","parameters":[{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > BackupDestinations > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","backup-destination"]},"v1-backup-destinations--backupDestinationId--patch-team-scoped":{"operationId":"patchBackupDestinationsBackupdestinationid","summary":"Patch backup destination","description":"Updates a backup destination.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the backup destination.","example":"Example Backup Destination"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"credentials":{"type":"object","properties":{"authMode":{"type":"string","enum":["staticCreds","workloadIdentity"],"description":"Whether the destination authenticates with static AWS credentials or a workload identity."},"workloadIdentityId":{"oneOf":[{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination.","x-required":true},{"type":"string","description":"ID of the workload identity used to authenticate with the S3 destination."}],"description":"ID of the workload identity used to authenticate with the S3 destination."},"accessKey":{"oneOf":[{"type":"string","description":"Access key used to authenticate with the S3 destination.","x-required":true}],"description":"Access key used to authenticate with the S3 destination."},"secretKey":{"oneOf":[{"type":"string","description":"Secret key used to authenticate with the S3 destination.","x-required":true}],"description":"Secret key used to authenticate with the S3 destination."},"bucketName":{"type":"string"},"region":{"type":"string"},"endpoint":{"type":"string","description":"S3 destination including region, fe s3.us-west-2.amazonaws.com"},"enableObjectLock":{"type":"boolean","description":"Enable S3 Object Lock (WORM) for this destination. Immutable after creation. Bucket must have Object Lock enabled."},"objectLockRetentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention period in days for object-locked blobs. Required if enableObjectLock is true. Immutable after creation."}},"required":["bucketName","region","endpoint"],"additionalProperties":false,"description":"Credentials used for the backup destination."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > BackupDestinations > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","backup-destination"]},"v1-backup-destinations--backupDestinationId--delete":{"operationId":"deleteBackupDestinationsBackupdestinationid","summary":"Delete backup destination","description":"Delete a backup destination.","parameters":[{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","backup-destination"]},"v1-backup-destinations--backupDestinationId--delete-team-scoped":{"operationId":"deleteBackupDestinationsBackupdestinationid","summary":"Delete backup destination","description":"Delete a backup destination.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations","team"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","backup-destination"]},"v1-backup-destinations--backupDestinationId--backups-get":{"operationId":"getBackupDestinationsBackupdestinationidBackups","summary":"List destinations backups","description":"Lists the backups associated with a backup destinations.","parameters":[{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of backups saved to this backup destination.","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"project":{"type":"object","properties":{"id":{"type":"string","description":"ID of the project this backup was taken for","example":"example-project"},"name":{"type":"string","description":"Name of the project this backup was taken for","example":"Example Project"}},"additionalProperties":false},"addon":{"type":"object","properties":{"id":{"type":"string","description":"ID of the addon this backup was taken for","example":"example-addon"},"name":{"type":"string","description":"Name of the addon this backup was taken for","example":"Example Addon"}},"additionalProperties":false},"config":{"type":"object","properties":{"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. The addon will be restored to this version when the backup is restored.","example":"4.4.8"},"addonType":{"type":"string","description":"The type of the addon this backup was taken for.","example":"mongodb"},"source":{"type":"object","properties":{"type":{"type":"string","enum":["global"],"description":"The type of backup.","example":"global"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"schedules":{"type":"array","items":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false},"description":"The schedules this backup was taken for."},"expiredBy":{"type":"number","format":"float","description":"The time the backup will expiry.","example":"1729232400000.0"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["id","name","status","config","expiredBy","createdAt","completedAt"],"additionalProperties":false,"description":"Data about a backup."},"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","backup-destinations-backups"]},"v1-backup-destinations--backupDestinationId--backups-get-team-scoped":{"operationId":"getBackupDestinationsBackupdestinationidBackups","summary":"List destinations backups","description":"Lists the backups associated with a backup destinations.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path","schema":{"name":"backupDestinationId","type":"string","required":true,"description":"ID of the backup destination","example":"example-destination","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of backups saved to this backup destination.","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"project":{"type":"object","properties":{"id":{"type":"string","description":"ID of the project this backup was taken for","example":"example-project"},"name":{"type":"string","description":"Name of the project this backup was taken for","example":"Example Project"}},"additionalProperties":false},"addon":{"type":"object","properties":{"id":{"type":"string","description":"ID of the addon this backup was taken for","example":"example-addon"},"name":{"type":"string","description":"Name of the addon this backup was taken for","example":"Example Addon"}},"additionalProperties":false},"config":{"type":"object","properties":{"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. The addon will be restored to this version when the backup is restored.","example":"4.4.8"},"addonType":{"type":"string","description":"The type of the addon this backup was taken for.","example":"mongodb"},"source":{"type":"object","properties":{"type":{"type":"string","enum":["global"],"description":"The type of backup.","example":"global"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"schedules":{"type":"array","items":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false},"description":"The schedules this backup was taken for."},"expiredBy":{"type":"number","format":"float","description":"The time the backup will expiry.","example":"1729232400000.0"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["id","name","status","config","expiredBy","createdAt","completedAt"],"additionalProperties":false,"description":"Data about a backup."},"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Backup Destinations","team"],"security":[],"x-nf-permission-required":"Account > Platform > BackupDestinations > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","backup-destinations-backups"]},"v1-billing-credit-balance-get":{"operationId":"getBillingCreditBalance","summary":"Get credit balance","description":"Gets the credit available to the account, by origin.","parameters":[],"responses":{"200":{"description":"The account credit balance.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"currency":{"type":"string","description":"The currency code.","example":"usd"},"total":{"type":"object","properties":{"available":{"type":"number","format":"float","description":"Credit available to spend now, across both sources. A Stripe balance the customer owes does not reduce this — it surfaces as an unpaid invoice instead."},"pending":{"type":"number","format":"float","description":"Credit granted but not yet available. Only credit grants have a pending state."}},"additionalProperties":false,"description":"The spendable credit total. Broken down by source below."},"grants":{"type":"object","properties":{"available":{"type":"number","format":"float","description":"Credit-grant balance available to spend now."},"pending":{"type":"number","format":"float","description":"Credit granted but not yet available."}},"additionalProperties":false,"description":"Credit from Stripe credit grants, which is what a credit purchase produces."},"customerBalance":{"type":"object","properties":{"amount":{"type":"number","format":"float","description":"A balance adjustment applied directly against the customer, e.g. a manually issued credit. Positive is credit in the customer's favour; negative is an amount owed. Only the credit direction counts toward `total.available`."}},"additionalProperties":false,"description":"Credit from a balance adjustment held against the Stripe customer."},"lastSyncedAt":{"type":"string","format":"date-time","description":"When the credit balance was last synchronized with Stripe."}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","credit-balance"]},"v1-billing-credit-balance-get-team-scoped":{"operationId":"getBillingCreditBalance","summary":"Get credit balance","description":"Gets the credit available to the account, by origin.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"The account credit balance.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"currency":{"type":"string","description":"The currency code.","example":"usd"},"total":{"type":"object","properties":{"available":{"type":"number","format":"float","description":"Credit available to spend now, across both sources. A Stripe balance the customer owes does not reduce this — it surfaces as an unpaid invoice instead."},"pending":{"type":"number","format":"float","description":"Credit granted but not yet available. Only credit grants have a pending state."}},"additionalProperties":false,"description":"The spendable credit total. Broken down by source below."},"grants":{"type":"object","properties":{"available":{"type":"number","format":"float","description":"Credit-grant balance available to spend now."},"pending":{"type":"number","format":"float","description":"Credit granted but not yet available."}},"additionalProperties":false,"description":"Credit from Stripe credit grants, which is what a credit purchase produces."},"customerBalance":{"type":"object","properties":{"amount":{"type":"number","format":"float","description":"A balance adjustment applied directly against the customer, e.g. a manually issued credit. Positive is credit in the customer's favour; negative is an amount owed. Only the credit direction counts toward `total.available`."}},"additionalProperties":false,"description":"Credit from a balance adjustment held against the Stripe customer."},"lastSyncedAt":{"type":"string","format":"date-time","description":"When the credit balance was last synchronized with Stripe."}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","team"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","credit-balance"]},"v1-billing-invoices-get":{"operationId":"getBillingInvoices","summary":"List invoices","description":"Lists finalized invoices.","parameters":[{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}}],"responses":{"200":{"description":"A list of invoices.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"invoices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the invoice."},"period":{"type":"object","properties":{"start":{"type":"number","format":"float","description":"The start of the billing period, as a Unix timestamp."},"end":{"type":"number","format":"float","description":"The end of the billing period, as a Unix timestamp."}},"additionalProperties":false},"currency":{"type":"string","description":"The currency code.","example":"usd"},"status":{"type":"string","enum":["draft","open","payment_failed","paid","uncollectible","void"],"description":"The invoice payment status, as reported by Stripe. `open` is finalized and awaiting payment — including while a payment is in flight or awaiting authentication — `uncollectible` has been written off, and `void` has been cancelled. `payment_failed` is only reported for invoices with no Stripe status to defer to.","example":"paid"},"total":{"type":"number","format":"float","description":"The total cost of the invoice, including tax. Omitted for a team-scoped caller."},"subTotal":{"type":"number","format":"float","description":"The subtotal before tax and discounts. Omitted for a team-scoped caller."},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false}},"additionalProperties":false,"description":"The PaaS price and usage totals for the period. Customer-level, except for a team-scoped caller, where it is that team's own slice — PaaS is the one category with a per-team tier, so it is reported rather than withheld. Drill into it per project and resource on the invoice detail endpoint."},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."}},"additionalProperties":false,"description":"The customer-level BYOC price and usage totals for the period. Omitted for a team-scoped caller: BYOC is aggregated to the customer and has no per-team tier."},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend for the period. Omitted for a team-scoped caller."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend for the period. Omitted for a team-scoped caller."}},"additionalProperties":false}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["list","invoices"]},"v1-billing-invoices-get-team-scoped":{"operationId":"getBillingInvoices","summary":"List invoices","description":"Lists finalized invoices.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}}],"responses":{"200":{"description":"A list of invoices.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"invoices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the invoice."},"period":{"type":"object","properties":{"start":{"type":"number","format":"float","description":"The start of the billing period, as a Unix timestamp."},"end":{"type":"number","format":"float","description":"The end of the billing period, as a Unix timestamp."}},"additionalProperties":false},"currency":{"type":"string","description":"The currency code.","example":"usd"},"status":{"type":"string","enum":["draft","open","payment_failed","paid","uncollectible","void"],"description":"The invoice payment status, as reported by Stripe. `open` is finalized and awaiting payment — including while a payment is in flight or awaiting authentication — `uncollectible` has been written off, and `void` has been cancelled. `payment_failed` is only reported for invoices with no Stripe status to defer to.","example":"paid"},"total":{"type":"number","format":"float","description":"The total cost of the invoice, including tax. Omitted for a team-scoped caller."},"subTotal":{"type":"number","format":"float","description":"The subtotal before tax and discounts. Omitted for a team-scoped caller."},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false}},"additionalProperties":false,"description":"The PaaS price and usage totals for the period. Customer-level, except for a team-scoped caller, where it is that team's own slice — PaaS is the one category with a per-team tier, so it is reported rather than withheld. Drill into it per project and resource on the invoice detail endpoint."},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."}},"additionalProperties":false,"description":"The customer-level BYOC price and usage totals for the period. Omitted for a team-scoped caller: BYOC is aggregated to the customer and has no per-team tier."},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend for the period. Omitted for a team-scoped caller."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend for the period. Omitted for a team-scoped caller."}},"additionalProperties":false}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","team"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["list","invoices"]},"v1-billing-invoices--invoiceId--get":{"operationId":"getBillingInvoicesInvoiceid","summary":"Get invoice","description":"Gets details about a given invoice.","parameters":[{"name":"invoiceId","type":"string","required":true,"description":"ID of the invoice","example":"835994C3-14310","in":"path","schema":{"name":"invoiceId","type":"string","required":true,"description":"ID of the invoice","example":"835994C3-14310","in":"path"}},{"name":"teamId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the team to filter by. Not accepted from a token that can only read one team — a team billed in its own right, or a team token reading an org's billing — since those responses already cover that team and no other, and start at the project level without it.","in":"query","schema":{"name":"teamId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the team to filter by. Not accepted from a token that can only read one team — a team billed in its own right, or a team token reading an org's billing — since those responses already cover that team and no other, and start at the project level without it.","in":"query"}},{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query","schema":{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query"}},{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query","schema":{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}},{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query","schema":{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query"}},{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query","schema":{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query"}},{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query","schema":{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query"}},{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query"}}],"responses":{"200":{"description":"Invoice details.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the invoice."},"period":{"type":"object","properties":{"start":{"type":"number","format":"float","description":"The start of the billing period, as a Unix timestamp."},"end":{"type":"number","format":"float","description":"The end of the billing period, as a Unix timestamp."}},"additionalProperties":false},"currency":{"type":"string","description":"The currency code.","example":"usd"},"status":{"type":"string","enum":["draft","open","payment_failed","paid","uncollectible","void"],"description":"The invoice payment status, as reported by Stripe. `open` is finalized and awaiting payment — including while a payment is in flight or awaiting authentication — `uncollectible` has been written off, and `void` has been cancelled. `payment_failed` is only reported for invoices with no Stripe status to defer to.","example":"paid"},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the team."},"name":{"type":"string","description":"The name of the team."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The team's PaaS price. When a projectId or resourceType filter is applied, this reflects only the filtered slice (e.g. one project, or one resource type across the team)."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project."},"name":{"type":"string","description":"The name of the project."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The project's PaaS price. When a resourceType filter is applied, this reflects only that resource type's spend within the project."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","description":"The type of the resource (service, job, harness, addon, volume, etc.)."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the resource."},"name":{"type":"string","description":"The name of the resource."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"duration":{"type":"number","format":"float","description":"Seconds the resource was billed for."}},"additionalProperties":false},"description":"The resources of this type."}},"additionalProperties":false},"description":"Resources grouped by type. Present when a projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of projects for this team. Present when a teamId, projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of teams with price and usage totals. Projects are included when a teamId, projectId or resourceType filter is applied. Resources are included when a projectId or resourceType filter is applied. Depth and the paged unit follow the active filters alone, never the number of teams, so an unfiltered response is always teams-only. The paged unit is reported as `pagination.unit`; page through it with that level's page parameters (e.g. `teamsPage`/`teamsPerPage`) until `pagination.hasNextPage` is false."}},"required":["teams"],"additionalProperties":false},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."},"clusters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the cluster."},"name":{"type":"string","description":"The cluster name."},"price":{"type":"object","properties":{"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."},"total":{"type":"number","format":"float","description":"The allocated cluster BYOC price. Kept unrounded so cluster totals reconcile with the customer BYOC total."}},"additionalProperties":false,"description":"Allocated BYOC spend for this cluster. The customer-level rate is apportioned by each resource component’s share of the customer total, so this is a reporting allocation rather than an independently billed cluster price. Its total is not rounded so all cluster totals remain reconcilable with the customer total."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"BYOC resource-hours consumed by this cluster."}},"additionalProperties":false},"description":"Cluster-level BYOC usage and allocated spend. Present on invoice and hourly usage detail responses."}},"additionalProperties":false},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend for the period."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend for the period."},"lineItems":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"What the line is for.","example":"Infrastructure Commitment"},"base":{"type":"number","format":"float","description":"The charge before proration. Present only when a proration applies."},"proration":{"type":"number","format":"float","description":"The prorated adjustment, negative for unused time. Present only when a proration applies."},"total":{"type":"number","format":"float","description":"The cost of the line, including any proration."}},"additionalProperties":false},"description":"The billed lines of the invoice — metered PaaS and BYOC usage, plus the charges the spend categories cannot express: support, enterprise feature sets, infrastructure commitments, BYOC plan fees, log sinks, and any one-off charge. Egress IP and load balancer lines are omitted, being fully reported by their own categories."},"subTotal":{"type":"number","format":"float","description":"The subtotal before tax and discounts."},"discounts":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total discount amount."}},"additionalProperties":false},"tax":{"type":"object","properties":{"percent":{"type":"number","format":"float","description":"The tax percentage."},"amount":{"type":"number","format":"float","description":"The tax amount."}},"additionalProperties":false},"total":{"type":"number","format":"float","description":"The total cost of the invoice, including tax."}},"required":["id","period"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1},"unit":{"type":"string","enum":["teams","projects","resources","hours","days","months","total"],"description":"What this page counts.","example":"days"}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","invoice"]},"v1-billing-invoices--invoiceId--get-team-scoped":{"operationId":"getBillingInvoicesInvoiceid","summary":"Get invoice","description":"Gets details about a given invoice.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"invoiceId","type":"string","required":true,"description":"ID of the invoice","example":"835994C3-14310","in":"path","schema":{"name":"invoiceId","type":"string","required":true,"description":"ID of the invoice","example":"835994C3-14310","in":"path"}},{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query","schema":{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query"}},{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query","schema":{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}},{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query","schema":{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query"}},{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query","schema":{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query"}},{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query","schema":{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query"}},{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query"}}],"responses":{"200":{"description":"Invoice details.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the invoice."},"period":{"type":"object","properties":{"start":{"type":"number","format":"float","description":"The start of the billing period, as a Unix timestamp."},"end":{"type":"number","format":"float","description":"The end of the billing period, as a Unix timestamp."}},"additionalProperties":false},"currency":{"type":"string","description":"The currency code.","example":"usd"},"status":{"type":"string","enum":["draft","open","payment_failed","paid","uncollectible","void"],"description":"The invoice payment status, as reported by Stripe. `open` is finalized and awaiting payment — including while a payment is in flight or awaiting authentication — `uncollectible` has been written off, and `void` has been cancelled. `payment_failed` is only reported for invoices with no Stripe status to defer to.","example":"paid"},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the team."},"name":{"type":"string","description":"The name of the team."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The team's PaaS price. When a projectId or resourceType filter is applied, this reflects only the filtered slice (e.g. one project, or one resource type across the team)."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project."},"name":{"type":"string","description":"The name of the project."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The project's PaaS price. When a resourceType filter is applied, this reflects only that resource type's spend within the project."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","description":"The type of the resource (service, job, harness, addon, volume, etc.)."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the resource."},"name":{"type":"string","description":"The name of the resource."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"duration":{"type":"number","format":"float","description":"Seconds the resource was billed for."}},"additionalProperties":false},"description":"The resources of this type."}},"additionalProperties":false},"description":"Resources grouped by type. Present when a projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of projects for this team. Present when a teamId, projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of teams with price and usage totals. Projects are included when a teamId, projectId or resourceType filter is applied. Resources are included when a projectId or resourceType filter is applied. Depth and the paged unit follow the active filters alone, never the number of teams, so an unfiltered response is always teams-only. The paged unit is reported as `pagination.unit`; page through it with that level's page parameters (e.g. `teamsPage`/`teamsPerPage`) until `pagination.hasNextPage` is false."}},"required":["teams"],"additionalProperties":false},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."},"clusters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the cluster."},"name":{"type":"string","description":"The cluster name."},"price":{"type":"object","properties":{"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."},"total":{"type":"number","format":"float","description":"The allocated cluster BYOC price. Kept unrounded so cluster totals reconcile with the customer BYOC total."}},"additionalProperties":false,"description":"Allocated BYOC spend for this cluster. The customer-level rate is apportioned by each resource component’s share of the customer total, so this is a reporting allocation rather than an independently billed cluster price. Its total is not rounded so all cluster totals remain reconcilable with the customer total."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"BYOC resource-hours consumed by this cluster."}},"additionalProperties":false},"description":"Cluster-level BYOC usage and allocated spend. Present on invoice and hourly usage detail responses."}},"additionalProperties":false},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend for the period."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend for the period."},"lineItems":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"What the line is for.","example":"Infrastructure Commitment"},"base":{"type":"number","format":"float","description":"The charge before proration. Present only when a proration applies."},"proration":{"type":"number","format":"float","description":"The prorated adjustment, negative for unused time. Present only when a proration applies."},"total":{"type":"number","format":"float","description":"The cost of the line, including any proration."}},"additionalProperties":false},"description":"The billed lines of the invoice — metered PaaS and BYOC usage, plus the charges the spend categories cannot express: support, enterprise feature sets, infrastructure commitments, BYOC plan fees, log sinks, and any one-off charge. Egress IP and load balancer lines are omitted, being fully reported by their own categories."},"subTotal":{"type":"number","format":"float","description":"The subtotal before tax and discounts."},"discounts":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total discount amount."}},"additionalProperties":false},"tax":{"type":"object","properties":{"percent":{"type":"number","format":"float","description":"The tax percentage."},"amount":{"type":"number","format":"float","description":"The tax amount."}},"additionalProperties":false},"total":{"type":"number","format":"float","description":"The total cost of the invoice, including tax."}},"required":["id","period"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1},"unit":{"type":"string","enum":["teams","projects","resources","hours","days","months","total"],"description":"What this page counts.","example":"days"}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","team"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","invoice"]},"v1-billing-usage-get":{"operationId":"getBillingUsage","summary":"List usage","description":"Lists hourly usage entries.","parameters":[{"name":"teamId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the team to filter by. Not accepted from a token that can only read one team — a team billed in its own right, or a team token reading an org's billing — since those responses already cover that team and no other, and start at the project level without it.","in":"query","schema":{"name":"teamId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the team to filter by. Not accepted from a token that can only read one team — a team billed in its own right, or a team token reading an org's billing — since those responses already cover that team and no other, and start at the project level without it.","in":"query"}},{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query","schema":{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query"}},{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query","schema":{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}},{"name":"cursor","description":"The cursor returned from the previous page of results — a Unix timestamp: the last emitted hour for `granularity=hour`, the last emitted bucket otherwise. Pass it back as returned rather than constructing one.","in":"query","schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24},{"type":"string","pattern":"^\\d+$"}]}},{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100, or 12 when `granularity=month` — a monthly page covers far more billing hours than the other granularities. Defaults to 12 for `granularity=month`, 50 otherwise.","example":50,"default":50,"in":"query","schema":{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100, or 12 when `granularity=month` — a monthly page covers far more billing hours than the other granularities. Defaults to 12 for `granularity=month`, 50 otherwise.","example":50,"default":50,"in":"query"}},{"name":"startTime","type":"integer","description":"The Unix timestamp to start from (inclusive).","in":"query","schema":{"name":"startTime","type":"integer","description":"The Unix timestamp to start from (inclusive).","in":"query"}},{"name":"endTime","type":"integer","description":"The Unix timestamp to end at (exclusive). Requires startTime.","in":"query","schema":{"name":"endTime","type":"integer","description":"The Unix timestamp to end at (exclusive). Requires startTime.","in":"query"}},{"name":"granularity","type":"string","enum":["total","hour","day","month"],"description":"The size of each returned entry. `hour` (default) returns raw billing hours. `day` and `month` roll hours into UTC calendar buckets and page over those buckets with `perPage` + `cursor`, walking back to the start of the account's usage history when no `startTime` is given. `total` sums the whole window into one entry, so it reads every hour at once and requires both `startTime` and `endTime`, no more than 366 days apart.","example":"hour","default":"hour","in":"query","schema":{"name":"granularity","type":"string","enum":["total","hour","day","month"],"description":"The size of each returned entry. `hour` (default) returns raw billing hours. `day` and `month` roll hours into UTC calendar buckets and page over those buckets with `perPage` + `cursor`, walking back to the start of the account's usage history when no `startTime` is given. `total` sums the whole window into one entry, so it reads every hour at once and requires both `startTime` and `endTime`, no more than 366 days apart.","example":"hour","default":"hour","in":"query"}}],"responses":{"200":{"description":"A list of usage entries.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"granularity":{"type":"string","enum":["total","hour","day","month"],"description":"The granularity each entry represents."},"window":{"type":"object","properties":{"start":{"type":"number","format":"float","description":"The oldest returned bucket's start, inclusive, as a Unix timestamp."},"end":{"type":"number","format":"float","description":"The newest returned bucket's end, exclusive, as a Unix timestamp."}},"additionalProperties":false,"description":"The span the entries on this page cover, on bucket boundaries — not the full range paging will reach. Entries carry only their start, so this is what states where the newest one ends; the newest bucket is usually still in progress, so `end` is normally in the future. Returned for the bucketed granularities, and omitted by a page past the end of the usage history, which covers no buckets."},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"usage":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number","format":"float","description":"The Unix timestamp of the entry. For bucketed granularities this is the start of the bucket."},"currency":{"type":"string","description":"The currency code.","example":"usd"},"total":{"type":"number","format":"float","description":"Total spend for this entry, across every category it reports. Summed before rounding, so it can differ from adding the categories below by a sub-cent amount. When a team, project or resourceType filter is active — or for a team-scoped caller — the customer-level categories are absent, so this is the spend in that scope rather than what the period cost the customer.","example":69.22},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false}},"additionalProperties":false,"description":"The PaaS usage for this entry."},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."}},"additionalProperties":false,"description":"Customer-level BYOC usage. Omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."}},"additionalProperties":false},"description":"An array of usage entries, newest first."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1},"unit":{"type":"string","enum":["teams","projects","resources","hours","days","months","total"],"description":"What this page counts.","example":"days"}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["list","usage"]},"v1-billing-usage-get-team-scoped":{"operationId":"getBillingUsage","summary":"List usage","description":"Lists hourly usage entries.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query","schema":{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query"}},{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query","schema":{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}},{"name":"cursor","description":"The cursor returned from the previous page of results — a Unix timestamp: the last emitted hour for `granularity=hour`, the last emitted bucket otherwise. Pass it back as returned rather than constructing one.","in":"query","schema":{"anyOf":[{"type":"string","minLength":24,"maxLength":24},{"type":"string","pattern":"^\\d+$"}]}},{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100, or 12 when `granularity=month` — a monthly page covers far more billing hours than the other granularities. Defaults to 12 for `granularity=month`, 50 otherwise.","example":50,"default":50,"in":"query","schema":{"name":"perPage","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100, or 12 when `granularity=month` — a monthly page covers far more billing hours than the other granularities. Defaults to 12 for `granularity=month`, 50 otherwise.","example":50,"default":50,"in":"query"}},{"name":"startTime","type":"integer","description":"The Unix timestamp to start from (inclusive).","in":"query","schema":{"name":"startTime","type":"integer","description":"The Unix timestamp to start from (inclusive).","in":"query"}},{"name":"endTime","type":"integer","description":"The Unix timestamp to end at (exclusive). Requires startTime.","in":"query","schema":{"name":"endTime","type":"integer","description":"The Unix timestamp to end at (exclusive). Requires startTime.","in":"query"}},{"name":"granularity","type":"string","enum":["total","hour","day","month"],"description":"The size of each returned entry. `hour` (default) returns raw billing hours. `day` and `month` roll hours into UTC calendar buckets and page over those buckets with `perPage` + `cursor`, walking back to the start of the account's usage history when no `startTime` is given. `total` sums the whole window into one entry, so it reads every hour at once and requires both `startTime` and `endTime`, no more than 366 days apart.","example":"hour","default":"hour","in":"query","schema":{"name":"granularity","type":"string","enum":["total","hour","day","month"],"description":"The size of each returned entry. `hour` (default) returns raw billing hours. `day` and `month` roll hours into UTC calendar buckets and page over those buckets with `perPage` + `cursor`, walking back to the start of the account's usage history when no `startTime` is given. `total` sums the whole window into one entry, so it reads every hour at once and requires both `startTime` and `endTime`, no more than 366 days apart.","example":"hour","default":"hour","in":"query"}}],"responses":{"200":{"description":"A list of usage entries.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"granularity":{"type":"string","enum":["total","hour","day","month"],"description":"The granularity each entry represents."},"window":{"type":"object","properties":{"start":{"type":"number","format":"float","description":"The oldest returned bucket's start, inclusive, as a Unix timestamp."},"end":{"type":"number","format":"float","description":"The newest returned bucket's end, exclusive, as a Unix timestamp."}},"additionalProperties":false,"description":"The span the entries on this page cover, on bucket boundaries — not the full range paging will reach. Entries carry only their start, so this is what states where the newest one ends; the newest bucket is usually still in progress, so `end` is normally in the future. Returned for the bucketed granularities, and omitted by a page past the end of the usage history, which covers no buckets."},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"usage":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"number","format":"float","description":"The Unix timestamp of the entry. For bucketed granularities this is the start of the bucket."},"currency":{"type":"string","description":"The currency code.","example":"usd"},"total":{"type":"number","format":"float","description":"Total spend for this entry, across every category it reports. Summed before rounding, so it can differ from adding the categories below by a sub-cent amount. When a team, project or resourceType filter is active — or for a team-scoped caller — the customer-level categories are absent, so this is the spend in that scope rather than what the period cost the customer.","example":69.22},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false}},"additionalProperties":false,"description":"The PaaS usage for this entry."},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."}},"additionalProperties":false,"description":"Customer-level BYOC usage. Omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."}},"additionalProperties":false},"description":"An array of usage entries, newest first."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1},"unit":{"type":"string","enum":["teams","projects","resources","hours","days","months","total"],"description":"What this page counts.","example":"days"}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","team"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["list","usage"]},"v1-billing-usage--timestamp--get":{"operationId":"getBillingUsageTimestamp","summary":"Get usage","description":"Gets usage details for a given billing hour.","parameters":[{"name":"timestamp","type":"string","required":true,"description":"Unix timestamp of the billing hour","example":"1655823815","in":"path","schema":{"name":"timestamp","type":"string","required":true,"description":"Unix timestamp of the billing hour","example":"1655823815","in":"path"}},{"name":"teamId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the team to filter by. Not accepted from a token that can only read one team — a team billed in its own right, or a team token reading an org's billing — since those responses already cover that team and no other, and start at the project level without it.","in":"query","schema":{"name":"teamId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the team to filter by. Not accepted from a token that can only read one team — a team billed in its own right, or a team token reading an org's billing — since those responses already cover that team and no other, and start at the project level without it.","in":"query"}},{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query","schema":{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query"}},{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query","schema":{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}},{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query","schema":{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query"}},{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query","schema":{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query"}},{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query","schema":{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query"}},{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query"}}],"responses":{"200":{"description":"Hourly usage detail.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"timestamp":{"type":"number","format":"float","description":"The Unix timestamp of the billing hour."},"currency":{"type":"string","description":"The currency code.","example":"usd"},"total":{"type":"number","format":"float","description":"Total spend for this hour, across every category it reports. Summed before rounding, so it can differ from adding the categories below by a sub-cent amount. It tracks `paas.price`, so a `teamId`/`projectId`/`resourceType` filter does NOT reduce it — the filter narrows the breakdown under `paas.teams[]` while `paas.price` stays the hour's full PaaS total, and only the customer-level categories drop out. For a team-scoped caller it is that team's own spend, since no customer-level figures are reported at all. (The `/usage` list differs: a filter there replaces the PaaS figure with the filtered slice.)","example":69.22},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the team."},"name":{"type":"string","description":"The name of the team."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The team's PaaS price. When a projectId or resourceType filter is applied, this reflects only the filtered slice (e.g. one project, or one resource type across the team)."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project."},"name":{"type":"string","description":"The name of the project."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The project's PaaS price. When a resourceType filter is applied, this reflects only that resource type's spend within the project."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","description":"The type of the resource (service, job, harness, addon, volume, etc.)."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the resource."},"name":{"type":"string","description":"The name of the resource."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"duration":{"type":"number","format":"float","description":"Seconds the resource was billed for."}},"additionalProperties":false},"description":"The resources of this type."}},"additionalProperties":false},"description":"Resources grouped by type. Present when a projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of projects for this team. Present when a teamId, projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of teams with price and usage totals. Projects are included when a teamId, projectId or resourceType filter is applied. Resources are included when a projectId or resourceType filter is applied. Depth and the paged unit follow the active filters alone, never the number of teams, so an unfiltered response is always teams-only. The paged unit is reported as `pagination.unit`; page through it with that level's page parameters (e.g. `teamsPage`/`teamsPerPage`) until `pagination.hasNextPage` is false."}},"required":["teams"],"additionalProperties":false,"description":"The PaaS usage breakdown for this hour. The drill-down depth follows the active filters, but `price` and `usage` above the breakdown remain the customer-level totals — a filter narrows `teams[]`, not the figures it sits under. A team-scoped caller instead gets its own team as those totals."},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."},"clusters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the cluster."},"name":{"type":"string","description":"The cluster name."},"price":{"type":"object","properties":{"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."},"total":{"type":"number","format":"float","description":"The allocated cluster BYOC price. Kept unrounded so cluster totals reconcile with the customer BYOC total."}},"additionalProperties":false,"description":"Allocated BYOC spend for this cluster. The customer-level rate is apportioned by each resource component’s share of the customer total, so this is a reporting allocation rather than an independently billed cluster price. Its total is not rounded so all cluster totals remain reconcilable with the customer total."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"BYOC resource-hours consumed by this cluster."}},"additionalProperties":false},"description":"Cluster-level BYOC usage and allocated spend. Present on invoice and hourly usage detail responses."}},"additionalProperties":false,"description":"Customer-level BYOC usage. Omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1},"unit":{"type":"string","enum":["teams","projects","resources","hours","days","months","total"],"description":"What this page counts.","example":"days"}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","org"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","usage"]},"v1-billing-usage--timestamp--get-team-scoped":{"operationId":"getBillingUsageTimestamp","summary":"Get usage","description":"Gets usage details for a given billing hour.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"timestamp","type":"string","required":true,"description":"Unix timestamp of the billing hour","example":"1655823815","in":"path","schema":{"name":"timestamp","type":"string","required":true,"description":"Unix timestamp of the billing hour","example":"1655823815","in":"path"}},{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query","schema":{"name":"projectId","type":"string","minLength":24,"maxLength":24,"description":"The ID of the project to filter by.","in":"query"}},{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query","schema":{"name":"resourceType","type":"string","enum":["job","service","harness","addon","volume"],"description":"The resource type to filter by (e.g. service, job, harness, addon, volume).","in":"query"}},{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query","schema":{"name":"removeLegacyFields","type":"boolean","description":"For a billing entity temporarily receiving the legacy billing API contract, return the current contract instead. Use the current query parameters with this option.","example":true,"in":"query"}},{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query","schema":{"name":"teamsPage","type":"integer","minimum":1,"description":"The page number of teams to access.","example":1,"in":"query"}},{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"teamsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of teams to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query","schema":{"name":"projectsPage","type":"integer","minimum":1,"description":"The page number of projects to access.","example":1,"in":"query"}},{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"projectsPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of projects to return per page. Maximum of 100.","example":50,"in":"query"}},{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query","schema":{"name":"resourcesPage","type":"integer","minimum":1,"description":"The page number of resources to access.","example":1,"in":"query"}},{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query","schema":{"name":"resourcesPerPage","type":"integer","minimum":1,"maximum":100,"description":"The number of resources to return per page. Maximum of 100.","example":50,"in":"query"}}],"responses":{"200":{"description":"Hourly usage detail.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"timestamp":{"type":"number","format":"float","description":"The Unix timestamp of the billing hour."},"currency":{"type":"string","description":"The currency code.","example":"usd"},"total":{"type":"number","format":"float","description":"Total spend for this hour, across every category it reports. Summed before rounding, so it can differ from adding the categories below by a sub-cent amount. It tracks `paas.price`, so a `teamId`/`projectId`/`resourceType` filter does NOT reduce it — the filter narrows the breakdown under `paas.teams[]` while `paas.price` stays the hour's full PaaS total, and only the customer-level categories drop out. For a team-scoped caller it is that team's own spend, since no customer-level figures are reported at all. (The `/usage` list differs: a filter there replaces the PaaS figure with the filtered slice.)","example":69.22},"scope":{"type":"object","properties":{"entityType":{"type":"string","enum":["team"],"description":"The entity the response is limited to."},"entityId":{"type":"string","description":"Identifier of that entity."}},"additionalProperties":false,"description":"Present when the response is narrowed to the caller's own entity."},"paas":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the team."},"name":{"type":"string","description":"The name of the team."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The team's PaaS price. When a projectId or resourceType filter is applied, this reflects only the filtered slice (e.g. one project, or one resource type across the team)."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project."},"name":{"type":"string","description":"The name of the project."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false,"description":"The project's PaaS price. When a resourceType filter is applied, this reflects only that resource type's spend within the project."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"resources":{"type":"array","items":{"type":"object","properties":{"resourceType":{"type":"string","description":"The type of the resource (service, job, harness, addon, volume, etc.)."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the resource."},"name":{"type":"string","description":"The name of the resource."},"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total PaaS price, rounded to 2 decimal places.","example":69.22},"cpu":{"type":"number","format":"float","description":"The CPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"storage":{"type":"number","format":"float","description":"The storage usage price."},"gpu":{"type":"number","format":"float","description":"The GPU usage price."}},"additionalProperties":false},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"storageGiBHours":{"type":"number","format":"float","description":"Storage GiB-hours consumed."},"gpuSpotHours":{"type":"number","format":"float","description":"Spot GPU hours consumed."},"gpuOnDemandHours":{"type":"number","format":"float","description":"On-demand GPU hours consumed."},"build":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to builds."},"run":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float"},"memoryGiBHours":{"type":"number","format":"float"}},"additionalProperties":false,"description":"The share of the usage attributable to running workloads."}},"additionalProperties":false},"duration":{"type":"number","format":"float","description":"Seconds the resource was billed for."}},"additionalProperties":false},"description":"The resources of this type."}},"additionalProperties":false},"description":"Resources grouped by type. Present when a projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of projects for this team. Present when a teamId, projectId or resourceType filter is applied."}},"additionalProperties":false},"description":"An array of teams with price and usage totals. Projects are included when a teamId, projectId or resourceType filter is applied. Resources are included when a projectId or resourceType filter is applied. Depth and the paged unit follow the active filters alone, never the number of teams, so an unfiltered response is always teams-only. The paged unit is reported as `pagination.unit`; page through it with that level's page parameters (e.g. `teamsPage`/`teamsPerPage`) until `pagination.hasNextPage` is false."}},"required":["teams"],"additionalProperties":false,"description":"The PaaS usage breakdown for this hour. The drill-down depth follows the active filters, but `price` and `usage` above the breakdown remain the customer-level totals — a filter narrows `teams[]`, not the figures it sits under. A team-scoped caller instead gets its own team as those totals."},"byoc":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total BYOC price, rounded to 2 decimal places."},"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."}},"additionalProperties":false,"description":"The customer-level BYOC price total. Always reflects the full customer total, regardless of drill-down filters."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"Customer-level BYOC usage hours."},"clusters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the cluster."},"name":{"type":"string","description":"The cluster name."},"price":{"type":"object","properties":{"vcpu":{"type":"number","format":"float","description":"The vCPU usage price."},"memory":{"type":"number","format":"float","description":"The memory usage price."},"gpuMemory":{"type":"number","format":"float","description":"The GPU memory usage price."},"cluster":{"type":"number","format":"float","description":"The cluster usage price."},"total":{"type":"number","format":"float","description":"The allocated cluster BYOC price. Kept unrounded so cluster totals reconcile with the customer BYOC total."}},"additionalProperties":false,"description":"Allocated BYOC spend for this cluster. The customer-level rate is apportioned by each resource component’s share of the customer total, so this is a reporting allocation rather than an independently billed cluster price. Its total is not rounded so all cluster totals remain reconcilable with the customer total."},"usage":{"type":"object","properties":{"vcpuHours":{"type":"number","format":"float","description":"vCPU hours consumed."},"memoryGiBHours":{"type":"number","format":"float","description":"Memory GiB-hours consumed."},"clusterHours":{"type":"number","format":"float","description":"Cluster hours consumed."},"gpuMemoryGiBHours":{"type":"number","format":"float","description":"GPU memory GiB-hours consumed."}},"additionalProperties":false,"description":"BYOC resource-hours consumed by this cluster."}},"additionalProperties":false},"description":"Cluster-level BYOC usage and allocated spend. Present on invoice and hourly usage detail responses."}},"additionalProperties":false,"description":"Customer-level BYOC usage. Omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"egressIp":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Egress IP spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."},"loadBalancer":{"type":"object","properties":{"price":{"type":"object","properties":{"total":{"type":"number","format":"float","description":"The total price, rounded to 2 decimal places."}},"additionalProperties":false},"usage":{"type":"object","properties":{"hours":{"type":"number","format":"float","description":"Hours consumed."}},"additionalProperties":false}},"additionalProperties":false,"description":"Load balancer spend. Customer-level, so omitted when a team, project or resourceType filter is active, or for a team-scoped caller."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1},"unit":{"type":"string","enum":["teams","projects","resources","hours","days","months","total"],"description":"What this page counts.","example":"days"}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Billing","team"],"security":[],"x-nf-permission-required":"Organisation > Admin > Billing > Read","x-nf-org-scoped":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","usage"]},"v1-cloud-providers-clusters-get":{"operationId":"getCloudProvidersClusters","summary":"List clusters","description":"Lists clusters for the authenticated user or team.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of clusters for the authenticated user","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"clusters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string","description":"Subnets id."},"description":"Subnets ids in which the node pool should be provisioned."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"default":"paas"}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"]},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3Region":{"type":"string"},"s3BucketName":{"type":"string"}},"required":["storageType","s3Region","s3BucketName"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"]},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string"},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."},"skipInstall":{"type":"boolean","default":false}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"A cluster object."},"description":"An array of clusters."}},"required":["clusters"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","cloud","clusters"]},"v1-cloud-providers-clusters-get-team-scoped":{"operationId":"getCloudProvidersClusters","summary":"List clusters","description":"Lists clusters for the authenticated user or team.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of clusters for the authenticated user","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"clusters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string","description":"Subnets id."},"description":"Subnets ids in which the node pool should be provisioned."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"default":"paas"}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"]},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3Region":{"type":"string"},"s3BucketName":{"type":"string"}},"required":["storageType","s3Region","s3BucketName"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"]},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string"},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."},"skipInstall":{"type":"boolean","default":false}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"A cluster object."},"description":"An array of clusters."}},"required":["clusters"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","cloud","clusters"]},"v1-cloud-providers-clusters-post":{"operationId":"postCloudProvidersClusters","summary":"Create cluster","description":"Creates a new cluster.","parameters":[],"responses":{"200":{"description":"Details about the created cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."}},"required":["name","provider","nodePools"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Clusters > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","cloud","cluster"]},"v1-cloud-providers-clusters-post-team-scoped":{"operationId":"postCloudProvidersClusters","summary":"Create cluster","description":"Creates a new cluster.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."}},"required":["name","provider","nodePools"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Clusters > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","cloud","cluster"]},"v1-cloud-providers-clusters-put":{"operationId":"putCloudProvidersClusters","summary":"Put cluster","description":"Creates or update a cluster.","parameters":[],"responses":{"200":{"description":"Details about the created or updated cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."}},"required":["name","provider","nodePools"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Clusters > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["put","cloud","cluster"]},"v1-cloud-providers-clusters-put-team-scoped":{"operationId":"putCloudProvidersClusters","summary":"Put cluster","description":"Creates or update a cluster.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created or updated cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."}},"required":["name","provider","nodePools"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Clusters > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["put","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--get":{"operationId":"getCloudProvidersClustersClusterid","summary":"Get cluster","description":"Get information about the given cluster","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}}],"responses":{"200":{"description":"Details about the given cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--get-team-scoped":{"operationId":"getCloudProvidersClustersClusterid","summary":"Get cluster","description":"Get information about the given cluster","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}}],"responses":{"200":{"description":"Details about the given cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--patch":{"operationId":"patchCloudProvidersClustersClusterid","summary":"Patch cluster","description":"Updates a cluster.","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}}],"responses":{"200":{"description":"Details about the updated cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["patch","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--patch-team-scoped":{"operationId":"patchCloudProvidersClustersClusterid","summary":"Patch cluster","description":"Updates a cluster.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}}],"responses":{"200":{"description":"Details about the updated cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of cluster","example":"gcp-cluster-1"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"entityType":{"type":"string","enum":["org","team"],"example":"team"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"status":{"type":"object","properties":{"state":{"type":"object","properties":{"state":{"type":"string","description":"Current state of the cluster.","example":"running"},"transitionTime":{"type":"string","format":"date-time","description":"Time of the last state transition."},"reason":{"type":"string","description":"The reason, given the cluster is in an error state."}},"required":["state"],"additionalProperties":false}},"additionalProperties":false},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Existing integration to use for this cluster.","example":"gcp-integration"},"storage":{"type":"object","properties":{"storageClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["storage-class","snapshot-class"]},"kubernetesName":{"type":"string"},"defaultSnapshotClass":{"type":"string"},"options":{"type":"object","properties":{"capabilities":{"type":"object","properties":{"expansion":{"type":"boolean","description":"Increasing volume size after provisioning."},"snapshot":{"type":"boolean","description":"Point in time snapshotting of volumes."}},"additionalProperties":false},"accessModes":{"type":"object","properties":{"ReadWriteOnce":{"type":"boolean","description":"Access mode where a volume is exclusively attached to a single pod at a time."},"ReadWriteMany":{"type":"boolean","description":"Access mode where a volume can be attached to multiple single pods at a time for read and write operations."}},"additionalProperties":false},"storageSize":{"type":"object","properties":{"minValidSize":{"type":"integer","minimum":1,"description":"Enforces a minimum storage size per addon or volume."},"maxValidSize":{"type":"integer","minimum":1,"description":"Enforces a maximum storage size per addon or volume."},"suggestedOptions":{"type":"array","items":{"type":"integer","minimum":1},"description":"Specific storage size options to suggest in the UI."}},"additionalProperties":false},"platform":{"type":"object","properties":{"supportedResources":{"type":"array","items":{"type":"string","enum":["addon","volume","build-cache"]}}},"additionalProperties":false}},"additionalProperties":false}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true},"snapshotClasses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kubernetesName":{"type":"string"}},"required":["id","name","kubernetesName"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"required":["type","resources","count"],"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"oci":{"type":"object","properties":{"vcnConfiguration":{"type":"object","properties":{"vcnId":{"type":"string","description":"ID of the OCI VCN the cluster should be created in."},"subnetIdForKubernetesApi":{"type":"string","description":"ID of the subnet to use for the Kubernetes API endpoint."},"subnetIdsForServiceLBs":{"type":"array","items":{"type":"string"},"description":"IDs of the subnets to use for service load balancers."}},"required":["vcnId","subnetIdForKubernetesApi","subnetIdsForServiceLBs"],"additionalProperties":false}},"required":["vcnConfiguration"],"additionalProperties":false,"description":"OCI specific data. Required when `provider` is `oci`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"coreweave":{"type":"object","properties":{"zone":{"type":"string","description":"AZ of the cluster"},"network":{"type":"object","properties":{"networkMode":{"type":"string","enum":["create-default","custom"],"description":"The network mode to use for this cluster. Use this to switch between the default network configuration and a custom VPC."},"vpcId":{"type":"string","description":"ID of the CoreWeave VPC to use for this cluster."},"customPrefixNames":{"type":"object","properties":{"podCidrName":{"type":"string","description":"Name of the VPC prefix to use for the pod CIDR."},"serviceCidrName":{"type":"string","description":"Name of the VPC prefix to use for the service CIDR."},"internalLbCidrNames":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Names of the VPC prefixes to use for internal load balancer CIDRs."}},"required":["podCidrName","serviceCidrName","internalLbCidrNames"],"additionalProperties":false}},"required":["networkMode"],"additionalProperties":false,"description":"Network settings"}},"required":["zone"],"additionalProperties":false,"description":"CoreWeave specific data. Required when `provider` is `coreweave`."},"nebius":{"type":"object","properties":{"projectId":{"type":"string","description":"Nebius project ID to place the cluster in."},"subnetId":{"type":"string","description":"Nebius VPC subnet ID for the cluster."}},"required":["projectId","subnetId"],"additionalProperties":false,"description":"Nebius specific data. Required when `provider` is `nebius`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"dns":{"type":"string","description":"Auto-generated dns identifier for this cluster.","example":"xxxxxxxxxx"},"updatedAt":{"type":"string","format":"date-time","description":"The time the cluster was last updated.","example":"2021-01-20T11:19:53.175Z"},"createdAt":{"type":"string","format":"date-time","description":"The time the cluster was created.","example":"2021-01-20T11:19:53.175Z"},"deletionRequested":{"type":"boolean","description":"Indicates if provider resource deletion has been requested.","example":false}},"required":["id","name","provider","nodePools","updatedAt","createdAt","deletionRequested"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":20,"description":"The name of the cluster.","example":"GCP Cluster 1"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the cluster.","example":"This is a new cluster."},"kubernetesVersion":{"type":"string","description":"Deprecated: This field is no longer used, the version is now set by the platform.","example":"1.30"},"nodePools":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of existing node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"6aa96121-0345-43ad-bade-af36d540c222"},"nodeType":{"type":"string","description":"Machine type to be used by the node pool.","example":"n2-standard-8"},"oci":{"type":"object","properties":{"ocpu":{"type":"integer","minimum":1},"memory":{"type":"integer","minimum":1}},"required":["ocpu","memory"],"additionalProperties":false,"description":"OCI instance specific settings. Must respect ratios as determined by the selected node type."},"gcp":{"type":"object","properties":{"enablePrivateNodes":{"type":"boolean","description":"Set this flag to disable public IP assignment for nodes in this node pool."}},"additionalProperties":false,"description":"GCP specific settings."},"azure":{"type":"object","properties":{"systemPool":{"type":"boolean","description":"When 'provider' is 'azure', at least one system node pool is required per cluster."},"enablePublicNodeIp":{"type":"boolean","description":"When 'provider' is 'azure', set this flag to use public node IPs."},"vnetSubnetId":{"type":"string","description":"ID of the vnet subnet to use."}},"additionalProperties":false,"description":"Azure specific settings."},"aws":{"type":"object","properties":{"launchTemplate":{"type":"object","properties":{"id":{"type":"string","description":"ID of the launch template to use."},"version":{"type":"integer","minimum":1,"description":"Version of the launch template that should be used."}},"required":["id","version"],"additionalProperties":false,"description":"Specify a launch template to use for this node pool. When using a launch template, the disk size selection on the node pool level will be ignored."}},"additionalProperties":false,"description":"AWS specific node pool settings."},"nebius":{"type":"object","properties":{"enablePublicNodeIps":{"type":"boolean","description":"Set this flag to assign public IPs to nodes in this node pool."},"osVersion":{"type":"string","description":"OS image version for nodes in this node pool."},"gpuDriverVersion":{"type":"string","description":"GPU driver version for nodes in this node pool."},"gpuClusterId":{"type":"string","description":"Nebius GPU cluster to attach the node pool to."}},"additionalProperties":false,"description":"Nebius specific node pool settings."},"nodeCount":{"type":"integer","minimum":0,"maximum":250,"description":"Number of nodes to the node pool should be provisioned with.","example":3},"autoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling is enabled for the node pool.","example":true,"default":false},"min":{"type":"integer","minimum":0,"maximum":249,"description":"The minimum number of nodes the node pool can be scaled down to.","example":0},"max":{"type":"integer","minimum":1,"maximum":250,"description":"The maximum number of nodes the node pool can be scaled up to.","example":10}},"additionalProperties":false,"nullable":true,"description":"Auto scaling settings to use for the node pool. Requires that the cloud provider supports this feature."},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."}},"additionalProperties":false}},"additionalProperties":false},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"diskType":{"type":"string","description":"The disk type to use."},"diskSize":{"type":"integer","minimum":1,"description":"Disk size in GB","example":100},"availabilityZones":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Zones in which the node pool should be provisioned."},"subnets":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":1,"description":"Subnets in which the node pool should be provisioned. Required if provider is `oci`."},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","nodeType","nodeCount","diskSize"],"additionalProperties":false,"description":"Node pool configuration for BYOC clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOC."},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID of the node pool. Must be passed when modifying existing node pools. Not relevant for new node pools","example":"node-pool-1"},"providerId":{"type":"string","pattern":"(^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$)|(^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$)","minLength":3,"maxLength":63,"description":"ID which identifies kubernetes nodes as belonging to this pool.","example":"6aa96121-0345-43ad-bade-af36d540c222"},"computeResources":{"type":"object","properties":{"gpu":{"type":"object","properties":{"supported":{"type":"boolean","description":"Whether this node pool consists of GPU nodes ."},"type":{"type":"string","pattern":"[a-z0-9]","description":"GPU type associated with the node pool.","example":"h100"},"resources":{"type":"object","properties":{"memoryInfo":{"type":"object","properties":{"sizeInGiB":{"type":"number","format":"float","minimum":1,"description":"Memory amount of the GPU in Gib.","example":80}},"additionalProperties":false}},"additionalProperties":false},"mig":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable Multi-Instance GPU (MIG)."},"partitions":{"type":"array","items":{"type":"string"},"description":"The partitions to configure on the GPU."}},"additionalProperties":false,"description":"Multi-Instance GPU (MIG). configuration object."},"timeslicing":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to enable time-slicing on the GPU."},"numSlices":{"type":"number","format":"float","minimum":1,"description":"Sets the amount of slices per GPU, e.g. how many pods may be scheduled concurrently on each GPU."}},"additionalProperties":false,"description":"Time-slicing configuration object."},"count":{"type":"integer","minimum":1,"description":"Number of GPUs per node.","example":1}},"additionalProperties":false}},"additionalProperties":false},"defaultPool":{"type":"boolean","description":"Fallback pool to which nodes which do not match any defined node pool are assigned. Exactly one default pool is required."},"preemptible":{"type":"boolean","description":"Configures node pool with preemptible / spot instances if enabled.","example":false,"default":false},"scheduling":{"type":"object","properties":{"allowJobs":{"type":"boolean","description":"Allow jobs to schedule to this node pool"},"onlyGpuJobs":{"type":"boolean","description":"Restrict job scheduling to jobs which have GPU resources configured. Only relevant for GPU node pools."},"allowServices":{"type":"boolean","description":"Allow services to schedule to this node pool"},"onlyGpuServices":{"type":"boolean","description":"Restrict service scheduling to services which have GPU resources configured. Only relevant for GPU node pools."},"allowAddons":{"type":"boolean","description":"Allow addons to schedule to this node pool"},"allowBuilds":{"type":"boolean","description":"Allow builds to schedule to this node pool"},"onlyGpuBuilds":{"type":"boolean","description":"Restrict build scheduling to builds which have GPU resources configured. Only relevant for GPU node pools."},"allowCeph":{"type":"boolean","description":"Allow the placement of Ceph pods"}},"additionalProperties":false,"description":"Define basic workload scheduling restrictions for this node pool"},"platform":{"type":"object","properties":{"architecture":{"type":"string","enum":["amd64","arm64"],"description":"Platform architecture of the underlying node type.","example":"amd64"}},"additionalProperties":false},"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Set of label keys and values that can be used for advanced scheduling in combination with resource tag scheduling rules."}},"required":["id","providerId"],"additionalProperties":false,"description":"Node pool configuration for BYOK clusters"},"minItems":1,"uniqueItems":true,"description":"An array of node pools for BYOK."}],"description":"An array of node pools for BYOC or BYOK."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"gcp":{"type":"object","properties":{"networking":{"type":"object","properties":{"network":{"type":"string","description":"Name of the GCP network the cluster should be created in. By default a new network will be created."},"subnetwork":{"type":"string","description":"Name of the GCP subnetwork the cluster should be created in. By default a new subnetwork will be created."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$","description":"GCP Project ID"}},"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`"},"aws":{"type":"object","properties":{"enablePublicAccessCidrs":{"type":"boolean","description":"Whether access to the public Kubernetes API endpoint should be restricted to specific CIDR ranges."},"publicAccessCidrs":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"CIDR ranges that are allowed to access the public Kubernetes API endpoint."},"subnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["default-subnets-for-azs","explicit-subnets"],"description":"The mode of the AWS subnet configuration"},"vpcId":{"type":"string","description":"Id of the VPC"},"subnets":{"type":"array","items":{"type":"string","example":"eu-west-1a"},"minItems":2,"description":"List of subnets the cluster should be created for. At least 2 must be specified."}},"required":["mode","subnets"],"additionalProperties":false},"vpcEgress":{"type":"boolean","description":"If egress traffic from the cluster should come from a single static egress IP."}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"azure":{"type":"object","properties":{"networking":{"type":"object","properties":{"vnetConfiguration":{"type":"object","properties":{"mode":{"type":"string","enum":["create-default","custom-vnet"],"description":"The vnet mode to use for this cluster. Use this to switch between creation of a new vnet per cluster or specifying a custom vnet."},"vnetId":{"type":"string","description":"Azure vnetId that should be used for this cluster. By default a new vnet will be created."}},"required":["mode"],"additionalProperties":false},"networkPluginMode":{"type":"string","enum":["overlay"],"description":"Optional setting to configure overlay mode on Azure."}},"additionalProperties":false},"enableAuthorizedIpRanges":{"type":"boolean","description":"Whether access to the Kubernetes API server should be restricted to authorized IP ranges."},"authorizedIpRanges":{"type":"array","items":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$"},"description":"IP ranges that are authorized to access the Kubernetes API server."}},"additionalProperties":false,"description":"Azure specific data. Required when `provider` is `azure`."},"byok":{"type":"object","properties":{"nodePoolProviderIdLabel":{"type":"string","description":"The node label used to identify which provider node pool a node belongs to."}},"required":["nodePoolProviderIdLabel"],"additionalProperties":false,"description":"BYOK specific data. Required when `provider` is `byok`."},"coordinates":{"type":"object","properties":{"latitude":{"type":"number","format":"float","minimum":-90,"maximum":90},"longitude":{"type":"number","format":"float","minimum":-180,"maximum":180}},"required":["latitude","longitude"],"additionalProperties":false,"description":"Geographic coordinates of the cluster. Optional, used for CDN geo-routing. Only applicable when `provider` is `byok`."},"region":{"type":"string","description":"Region of the cluster. Can only be updated for BYOK clusters.","example":"europe-west2"},"settings":{"type":"object","properties":{"builds":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","internal","build-cluster"],"description":"Determines where builds are run: on Northflank infrastructure (paas), on this cluster (internal) or on a dedicated build cluster (build-cluster)."},"plan":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Plan to use for builds if they are run on the cluster","example":"nf-compute-200"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Cluster to use for scheduling builds"},"caching":{"type":"object","properties":{"allow":{"type":"boolean","description":"Whether to allow local disk based caching for builds."},"storageClassName":{"type":"string","description":"Storage class used by default for local disk based caching."}},"additionalProperties":false,"description":"Cache settings for builds"}},"additionalProperties":false},"registry":{"type":"object","properties":{"mode":{"type":"string","enum":["paas","self-hosted"],"description":"Determines where built images are stored: in the Northflank registry (paas) or in a self-hosted registry."},"registryId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Credentials to use for storing of images.","example":"my-registry-credentials"}},"additionalProperties":false},"logging":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","enum":["paas"],"description":"The logging mode. `paas` stores logs on Northflank infrastructure."}},"additionalProperties":false,"description":"Logging via PaaS."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["s3"]},"s3BucketName":{"type":"string","description":"Name of the S3 bucket used for Loki log storage."},"s3AccessKey":{"type":"string","description":"Access key for the S3 bucket used for Loki log storage."},"s3SecretKey":{"type":"string","description":"Secret key for the S3 bucket used for Loki log storage."},"s3Region":{"type":"string","description":"Region of the S3 bucket used for Loki log storage."}},"required":["storageType","s3BucketName","s3AccessKey","s3SecretKey","s3Region"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (S3 storage)."},{"type":"object","properties":{"mode":{"type":"string","enum":["loki"],"description":"The logging mode. `loki` stores logs in your own storage via Loki."},"loki":{"type":"object","properties":{"storageType":{"type":"string","enum":["gcs"]},"gcsBucketName":{"type":"string","description":"Name of the GCS bucket used for Loki log storage."},"gcpIntegrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"ID of the GCP integration used to access the GCS bucket."}},"required":["storageType","gcsBucketName","gcpIntegrationId"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Logging via Loki (GCS storage)."}],"description":"Logging settings"},"networking":{"type":"object","properties":{"overlayNetwork":{"type":"boolean","description":"Whether overlay networking is enabled for this cluster."},"overlayCIDR":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/([0-9]|[1-2][0-9]|3[0-2]))$","description":"CIDR range for the overlay network."},"istio":{"type":"object","properties":{"enablePublicLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a public ingress load balancer. Defaults to true."},"enablePrivateLoadBalancer":{"type":"boolean","description":"Whether the cluster runs a VPC ingress load balancer. Defaults to false; BYOK exposure is customer-controlled."},"publicLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."},"privateLoadBalancer":{"type":"object","properties":{"serviceAnnotations":{"type":"object","properties":{},"additionalProperties":{"type":"string"}},"loadBalancerClass":{"type":"string","pattern":"^(?:(?=[^/]{1,253}\\/)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*\\/)?[a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,61}[a-zA-Z0-9])?(?![\\s\\S])"}},"additionalProperties":false,"description":"Customer configuration for a BYOK ingress Service. Immutable after first assignment; exposure is controlled by the customer."}},"additionalProperties":false}},"additionalProperties":false},"vanityDomains":{"type":"object","properties":{"apps":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"customDomains":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false},"loadBalancers":{"type":"object","properties":{"zoneName":{"type":"string"},"integrationId":{"type":"string"}},"required":["zoneName","integrationId"],"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"workloads":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for workloads"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"builds":{"type":"object","properties":{"runtimeClass":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds"}},"additionalProperties":false,"description":"DEPRECATED: This field will be removed in the near future."},"sandboxing":{"type":"object","properties":{"installGvisor":{"type":"boolean"},"installMicroVm":{"type":"boolean"},"defaultSandbox":{"type":"object","properties":{"builds":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for builds if none is configured"},"jobs":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for jobs if none is configured"},"services":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for services if none is configured"},"addons":{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Default runtime class used for addons if none is configured"}},"additionalProperties":false}},"additionalProperties":false},"installKata":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"installGvisor":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"cleanupVolumes":{"type":"boolean","default":true},"cleanupSnapshots":{"type":"boolean","default":true},"cephStorageProvider":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"resources":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":1,"maximum":20,"description":"Configure the CPU resources per Ceph replica"},"memory":{"type":"number","format":"float","minimum":4096,"maximum":40960,"description":"Configure the memory resources per Ceph replica"},"storage":{"type":"number","format":"float","minimum":102400,"maximum":5242880,"description":"Configure the data disk size per Ceph replica"}},"additionalProperties":false},"enableMultiReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be enable use of multi read write storage for persistent volumes on the cluster."},"enableSingleReadWriteStorage":{"type":"boolean","description":"Configure Ceph to be used as default storage class for single read write storage. This will replace the default storage of the cloud provider."},"enableErasureCoding":{"type":"boolean","description":"Configure Ceph to be set up with erasure coding. This will be less fault tolerant but more cost effective."},"enableTopologyAwareScheduling":{"type":"boolean","description":"Configure Ceph to be set up with topology aware scheduling, enforcing deployment across multiple zones."}},"additionalProperties":false}},"additionalProperties":false},"requestModifiers":{"type":"object","properties":{"services":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for services"},"jobs":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for jobs"},"builds":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.2,"default":0.2},"memory":{"type":"number","format":"float","minimum":0.1,"maximum":1,"example":0.5,"default":0.5}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for builds"},"addons":{"type":"object","properties":{"cpu":{"type":"number","format":"float","minimum":0.2,"maximum":1,"example":0.5,"default":0.5},"memory":{"type":"number","format":"float","minimum":0.4,"maximum":1,"example":0.8,"default":0.8}},"required":["cpu","memory"],"additionalProperties":false,"description":"Request modifiers for addons"}},"additionalProperties":false,"description":"Allows customising request modifier values."}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["patch","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--delete":{"operationId":"deleteCloudProvidersClustersClusterid","summary":"Delete cluster","description":"Delete the given cluster. Fails if the cluster has associated projects.","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The cluster couldn't be deleted as it has dependencies that have not been deleted"}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Delete","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--delete-team-scoped":{"operationId":"deleteCloudProvidersClustersClusterid","summary":"Delete cluster","description":"Delete the given cluster. Fails if the cluster has associated projects.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The cluster couldn't be deleted as it has dependencies that have not been deleted"}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Delete","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","cloud","cluster"]},"v1-cloud-providers-clusters--clusterId--nodes-get":{"operationId":"getCloudProvidersClustersClusteridNodes","summary":"List cluster nodes","description":"Get a list of nodes for the given cluster","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["RUNNING","DELETED"],"description":"Filter the node list by state of the nodes.","example":"RUNNING","in":"query","schema":{"name":"status","type":"string","enum":["RUNNING","DELETED"],"description":"Filter the node list by state of the nodes.","example":"RUNNING","in":"query"}}],"responses":{"200":{"description":"List of nodes for the given cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string","description":"The id of the node.","example":"87a11ea9-3493-40d3-9f50-280c1d7c77a3"},"nodeName":{"type":"string","description":"The name of the node.","example":"gke-nf-example-cluster-nf-951dfaf6-a70a-7697bc0d-n771"},"nodePool":{"type":"string","description":"The node pool the node is a part of.","example":"nf-951dfaf6-a70a-4550-bab6-b5364d5da20c"},"status":{"type":"string","description":"The status of the node.","example":"RUNNING"},"zone":{"type":"string","description":"The zone the node is running in.","example":"us-central1-c"},"region":{"type":"string","description":"The region the node is running in.","example":"us-central1"},"instanceType":{"type":"string","description":"The type of the node.","example":"n2-standard-4"},"createdAt":{"type":"string","format":"date-time","example":"2000-01-01T12:00:00.000Z"}},"additionalProperties":false,"description":"A node object."},"description":"An array of nodes."}},"required":["nodes"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","cloud","cluster","nodes"]},"v1-cloud-providers-clusters--clusterId--nodes-get-team-scoped":{"operationId":"getCloudProvidersClustersClusteridNodes","summary":"List cluster nodes","description":"Get a list of nodes for the given cluster","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["RUNNING","DELETED"],"description":"Filter the node list by state of the nodes.","example":"RUNNING","in":"query","schema":{"name":"status","type":"string","enum":["RUNNING","DELETED"],"description":"Filter the node list by state of the nodes.","example":"RUNNING","in":"query"}}],"responses":{"200":{"description":"List of nodes for the given cluster.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"nodes":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string","description":"The id of the node.","example":"87a11ea9-3493-40d3-9f50-280c1d7c77a3"},"nodeName":{"type":"string","description":"The name of the node.","example":"gke-nf-example-cluster-nf-951dfaf6-a70a-7697bc0d-n771"},"nodePool":{"type":"string","description":"The node pool the node is a part of.","example":"nf-951dfaf6-a70a-4550-bab6-b5364d5da20c"},"status":{"type":"string","description":"The status of the node.","example":"RUNNING"},"zone":{"type":"string","description":"The zone the node is running in.","example":"us-central1-c"},"region":{"type":"string","description":"The region the node is running in.","example":"us-central1"},"instanceType":{"type":"string","description":"The type of the node.","example":"n2-standard-4"},"createdAt":{"type":"string","format":"date-time","example":"2000-01-01T12:00:00.000Z"}},"additionalProperties":false,"description":"A node object."},"description":"An array of nodes."}},"required":["nodes"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","cloud","cluster","nodes"]},"v1-cloud-providers-clusters--clusterId--nodes--nodeId--cordon-post":{"operationId":"postCloudProvidersClustersClusteridNodesNodeidCordon","summary":"Cordon cluster node","description":"Cordon a node on the cluster to prevent new pods from scheduling on it.","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path","schema":{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["cordon","cloud","cluster","node"]},"v1-cloud-providers-clusters--clusterId--nodes--nodeId--cordon-post-team-scoped":{"operationId":"postCloudProvidersClustersClusteridNodesNodeidCordon","summary":"Cordon cluster node","description":"Cordon a node on the cluster to prevent new pods from scheduling on it.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path","schema":{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["cordon","cloud","cluster","node"]},"v1-cloud-providers-clusters--clusterId--nodes--nodeId--drain-post":{"operationId":"postCloudProvidersClustersClusteridNodesNodeidDrain","summary":"Drain cluster node","description":"Drain a node by evicting all running pods.","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path","schema":{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["drain","cloud","cluster","node"]},"v1-cloud-providers-clusters--clusterId--nodes--nodeId--drain-post-team-scoped":{"operationId":"postCloudProvidersClustersClusteridNodesNodeidDrain","summary":"Drain cluster node","description":"Drain a node by evicting all running pods.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path","schema":{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["drain","cloud","cluster","node"]},"v1-cloud-providers-clusters--clusterId--nodes--nodeId--uncordon-post":{"operationId":"postCloudProvidersClustersClusteridNodesNodeidUncordon","summary":"Uncordon cluster node","description":"Uncordon a node on the cluster if it was previously cordoned.","parameters":[{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path","schema":{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["uncordon","cloud","cluster","node"]},"v1-cloud-providers-clusters--clusterId--nodes--nodeId--uncordon-post-team-scoped":{"operationId":"postCloudProvidersClustersClusteridNodesNodeidUncordon","summary":"Uncordon cluster node","description":"Uncordon a node on the cluster if it was previously cordoned.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path","schema":{"name":"clusterId","type":"string","required":true,"description":"ID of the cluster","example":"gcp-cluster-1","in":"path"}},{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path","schema":{"name":"nodeId","type":"string","required":true,"description":"ID of the node","example":"78861f8a-2fcf-4a3d-869c-434ec2e3f0c1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Clusters > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["uncordon","cloud","cluster","node"]},"v1-cloud-providers-integrations-get":{"operationId":"getCloudProvidersIntegrations","summary":"List integrations","description":"Lists integrations for the authenticated user or team.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of integrations for the authenticated user","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"integrations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["name","provider","id","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"An integration object."},"description":"An array of integrations."}},"required":["integrations"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Integrations > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","cloud","integrations"]},"v1-cloud-providers-integrations-get-team-scoped":{"operationId":"getCloudProvidersIntegrations","summary":"List integrations","description":"Lists integrations for the authenticated user or team.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of integrations for the authenticated user","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"integrations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["name","provider","id","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"An integration object."},"description":"An array of integrations."}},"required":["integrations"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Integrations > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","cloud","integrations"]},"v1-cloud-providers-integrations-post":{"operationId":"postCloudProvidersIntegrations","summary":"Create integration","description":"Creates a new integration.","parameters":[],"responses":{"200":{"description":"Details about the created integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."}},"required":["name","provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Integrations > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","cloud","integration"]},"v1-cloud-providers-integrations-post-team-scoped":{"operationId":"postCloudProvidersIntegrations","summary":"Create integration","description":"Creates a new integration.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."}},"required":["name","provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Integrations > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","cloud","integration"]},"v1-cloud-providers-integrations-put":{"operationId":"putCloudProvidersIntegrations","summary":"Put integration","description":"Creates or updates a integration.","parameters":[{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."}},"required":["name","provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Integrations > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["put","cloud","integration"]},"v1-cloud-providers-integrations-put-team-scoped":{"operationId":"putCloudProvidersIntegrations","summary":"Put integration","description":"Creates or updates a integration.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."}},"required":["name","provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Integrations > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["put","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--get":{"operationId":"getCloudProvidersIntegrationsIntegrationid","summary":"Get integration","description":"Get information about the given integration","parameters":[{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"Details about the given integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Integrations > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--get-team-scoped":{"operationId":"getCloudProvidersIntegrationsIntegrationid","summary":"Get integration","description":"Get information about the given integration","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"Details about the given integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Integrations > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--patch":{"operationId":"patchCloudProvidersIntegrationsIntegrationid","summary":"Patch integration","description":"Updates a integration.","parameters":[{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"Details about the updated integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"}},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Integrations > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["patch","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--patch-team-scoped":{"operationId":"patchCloudProvidersIntegrationsIntegrationid","summary":"Patch integration","description":"Updates a integration.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"Details about the updated integration.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the integration","example":"example-integration"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the cloud provider integration.","example":"Example Integration"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"provider":{"type":"string","enum":["aws","aws-eusc","azure","civo","gcp","oci","cloudflare","coreweave","nebius","aiven","backblaze","akamai","planetscale","byok"],"description":"Cloud provider to be used for the selected resource","example":"gcp"},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"},"default":["byoc"]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"byok":{"type":"object","properties":{"connectionMode":{"type":"string","enum":["direct","connector"],"description":"Whether Kubernetes API access is direct or through a Northflank connector.","default":"direct"},"requireVerification":{"type":"boolean","oneOf":[{"type":"boolean","default":false}],"description":"Require explicit confirmation of the connector cluster before allowing access."}},"additionalProperties":false},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{"type":"object","properties":{"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"permissionCheckLevel":{"type":"string","enum":["enabled","disabled","ignore-implicit-deny-by-organization"]}},"additionalProperties":false,"description":"AWS specific data. Required when `provider` is `aws` or `aws-eusc`."},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"GCP Project ID"},"authenticationMode":{"type":"string","enum":["accessKey","crossAccountRole"],"description":"The provider authentication mode to use for this integration.","example":"accessKey"},"serviceAccountEmail":{"type":"string","description":"Service account email that will be used for cross account access."}},"required":["projectId"],"additionalProperties":false,"description":"GCP specific data. Required when `provider` is `gcp`."},"cloudflare":{"type":"object","properties":{"credentialType":{"type":"string","enum":["apiToken","originCAKey","globalApiKey"],"description":"The type of api key","example":"apiToken"}},"additionalProperties":false,"description":"Cloudflare specific data. Required when `provider` is `cloudflare`."},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","suspended"]},"affectedCredentialCount":{"type":"integer","minimum":0},"updatedAt":{"type":"string","format":"date-time"},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"nextAttemptAt":{"type":"string","format":"date-time"},"lastError":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"failureCount":{"type":"integer","minimum":1},"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"},"occurredAt":{"type":"string","format":"date-time"}},"required":["credentialId","failureCount","type","message","occurredAt"],"additionalProperties":false}},"required":["status","affectedCredentialCount"],"additionalProperties":false,"description":"Status of automatic registry credential token refreshes for this integration."},"createdAt":{"type":"string","format":"date-time","description":"The time the integration was created.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","provider","registryCredentialRefresh","createdAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Cloud Providers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the integration.","example":"This is a new cloud provider integration."},"features":{"type":"array","items":{"type":"string","enum":["byoc","byoc-static-egress","byoc-custom-launch-templates","byoc-custom-vpc","byoc-logs","cloudfront","route53","registry-pull","registry-push","opentofu","workload-identity","workload-identity-managed"],"description":"The type of provider integration.","example":"byoc"}},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable BYOC restrictions for this entity"},"teams":{"type":"array","items":{"type":"object","properties":{"teamId":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":45,"description":"The ID of the team that has access to this BYOC cluster"}},"required":["teamId"]},"description":"List of teams that have access to this BYOC cluster","default":[]}},"required":["enabled"],"additionalProperties":false,"description":"BYOC restrictions configuration for controlling team access"},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string","description":"Contents of a GCP key file."},"accessKey":{"type":"string","description":"AWS access key."},"secretKey":{"type":"string","description":"AWS secret key."},"roleArn":{"type":"string","description":"AWS IAM role ARN."},"externalId":{"type":"string","description":"AWS shared secret (external id)."},"apiKey":{"type":"string","description":"API key."},"email":{"type":"string","format":"email","description":"Email address for Cloudflare global API key."},"tenantId":{"type":"string","description":"Directory (tenant) ID "},"clientId":{"type":"string","description":"Application (client) ID "},"objectId":{"type":"string","description":"Object ID"},"secret":{"type":"string","description":"Secret"},"subscriptionId":{"type":"string","description":"Azure Subscription ID"},"region":{"type":"string","description":"OCI Authentication Region"},"tenancyId":{"type":"string","description":"OCI Tenancy ID"},"userId":{"type":"string","description":"User ID"},"fingerprint":{"type":"string","description":"Fingerprint"},"privateKey":{"type":"string","description":"OCI Private Key"},"passphrase":{"type":"string","description":"Passphrase"},"compartmentId":{"type":"string","description":"OCI Compartment ID"},"serviceAccountId":{"type":"string","description":"Nebius service account ID"},"publicKeyId":{"type":"string","description":"Nebius authorized public key ID"},"privateKeyPem":{"type":"string","description":"Nebius private key in PEM format"},"kubeconfig":{"type":"string","description":"Kubeconfig"},"applicationKeyId":{"type":"string","description":"Backblaze Application Key ID"},"applicationKey":{"type":"string","description":"Backblaze Application Key"},"host":{"type":"string","description":"Akamai Host"},"accessToken":{"type":"string","description":"Akamai Access Token"},"clientToken":{"type":"string","description":"Akamai Client Token"},"clientSecret":{"type":"string","description":"Akamai Client Secret"},"serviceTokenId":{"type":"string","description":"PlanetScale Service Token ID"},"serviceToken":{"type":"string","description":"PlanetScale Service Token"}},"additionalProperties":false,"description":"Cloud provider credential input, required fields dependent on which provider is chosen."},"aws":{}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Integrations > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["patch","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--delete":{"operationId":"deleteCloudProvidersIntegrationsIntegrationid","summary":"Delete integration","description":"Delete the given integration. Fails if the integration is associated with existing clusters.","parameters":[{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The integration couldn't be deleted as it has dependencies that have not been deleted"}},"tags":["Cloud Providers","org"],"security":[],"x-nf-permission-required":"Account > Cloud > Integrations > Delete","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--delete-team-scoped":{"operationId":"deleteCloudProvidersIntegrationsIntegrationid","summary":"Delete integration","description":"Delete the given integration. Fails if the integration is associated with existing clusters.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The integration couldn't be deleted as it has dependencies that have not been deleted"}},"tags":["Cloud Providers","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Integrations > Delete","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","cloud","integration"]},"v1-cloud-providers-integrations--integrationId--workload-identity-provider-get":{"operationId":"getCloudProvidersIntegrationsIntegrationidWorkloadIdentityProvider","summary":"Get workload identity provider status","description":"Checks whether the OIDC/workload identity provider resources have been installed on the given cloud provider integration account.","parameters":[{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"The current installation status of the identity provider.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["installed","missing-ids","missing-remote","id-mismatch","permission-denied"],"description":"The current installation status of the identity provider on the cloud account."}},"required":["status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Read","x-nf-team-scoped":true},"v1-cloud-providers-integrations--integrationId--workload-identity-provider-get-team-scoped":{"operationId":"getCloudProvidersIntegrationsIntegrationidWorkloadIdentityProvider","summary":"Get workload identity provider status","description":"Checks whether the OIDC/workload identity provider resources have been installed on the given cloud provider integration account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"The current installation status of the identity provider.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["installed","missing-ids","missing-remote","id-mismatch","permission-denied"],"description":"The current installation status of the identity provider on the cloud account."}},"required":["status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Read","x-nf-team-scoped":true},"v1-cloud-providers-integrations--integrationId--workload-identity-provider-install-post":{"operationId":"postCloudProvidersIntegrationsIntegrationidWorkloadIdentityProviderInstall","summary":"Install workload identity provider","description":"Triggers installation of the OIDC provider or workload identity pool resources on the given cloud provider integration account. This is required once per cloud account before creating managed workload identities.","parameters":[{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Update","x-nf-team-scoped":true},"v1-cloud-providers-integrations--integrationId--workload-identity-provider-install-post-team-scoped":{"operationId":"postCloudProvidersIntegrationsIntegrationidWorkloadIdentityProviderInstall","summary":"Install workload identity provider","description":"Triggers installation of the OIDC provider or workload identity pool resources on the given cloud provider integration account. This is required once per cloud account before creating managed workload identities.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path","schema":{"name":"integrationId","type":"string","required":true,"description":"ID of the BYOC provider integration","example":"gcp-integration-1","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Update","x-nf-team-scoped":true},"v1-container-snapshots-get":{"operationId":"getContainerSnapshots","summary":"List container snapshots","description":"Gets container snapshots belonging to the team.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","format":"uuid","description":"The snapshot UUID cursor returned from the previous page.","in":"query","schema":{"name":"cursor","type":"string","format":"uuid","description":"The snapshot UUID cursor returned from the previous page.","in":"query"}},{"name":"projectId","type":"string","description":"Filter snapshots by source project ID.","in":"query","schema":{"name":"projectId","type":"string","description":"Filter snapshots by source project ID.","in":"query"}},{"name":"serviceId","type":"string","description":"Filter snapshots by source service ID.","in":"query","schema":{"name":"serviceId","type":"string","description":"Filter snapshots by source service ID.","in":"query"}},{"name":"state","type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"],"description":"Filter snapshots by state.","in":"query","schema":{"name":"state","type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"],"description":"Filter snapshots by state.","in":"query"}},{"name":"trigger","type":"string","enum":["manual","containerTermination"],"description":"Filter snapshots by trigger.","in":"query","schema":{"name":"trigger","type":"string","enum":["manual","containerTermination"],"description":"Filter snapshots by trigger.","in":"query"}}],"responses":{"200":{"description":"A list of container snapshots.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containerSnapshots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"trigger":{"type":"string","enum":["manual","containerTermination"]},"state":{"type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"]},"source":{"type":"object","properties":{"projectId":{"type":"string"},"nfObject":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["job","service","harness","addon","volume","opentofu-job","llm-model-deployment","external-addon"]}},"required":["id","type"],"additionalProperties":false}},"required":["projectId","nfObject"],"additionalProperties":false},"target":{"type":"object","properties":{"podName":{"type":"string"}},"required":["podName"],"additionalProperties":false},"compatibility":{"type":"object","properties":{"runtime":{"type":"string","enum":["kata"]},"architecture":{"type":"string","enum":["x86","arm"]},"baseImageDigest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["runtime","architecture"],"additionalProperties":false},"parentSnapshotId":{"type":"string","format":"uuid"},"inUse":{"type":"boolean"},"result":{"type":"object","properties":{"sizeBytes":{"type":"integer","minimum":0}},"required":["sizeBytes"],"additionalProperties":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},"requestedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"lastTransitionTime":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","trigger","state","source","target","compatibility","inUse","lastTransitionTime","createdAt","updatedAt"],"additionalProperties":false}}},"required":["containerSnapshots"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Container Snapshots"],"security":[],"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","container-snapshots"]},"v1-container-snapshots-get-team-scoped":{"operationId":"getContainerSnapshots","summary":"List container snapshots","description":"Gets container snapshots belonging to the team.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","format":"uuid","description":"The snapshot UUID cursor returned from the previous page.","in":"query","schema":{"name":"cursor","type":"string","format":"uuid","description":"The snapshot UUID cursor returned from the previous page.","in":"query"}},{"name":"projectId","type":"string","description":"Filter snapshots by source project ID.","in":"query","schema":{"name":"projectId","type":"string","description":"Filter snapshots by source project ID.","in":"query"}},{"name":"serviceId","type":"string","description":"Filter snapshots by source service ID.","in":"query","schema":{"name":"serviceId","type":"string","description":"Filter snapshots by source service ID.","in":"query"}},{"name":"state","type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"],"description":"Filter snapshots by state.","in":"query","schema":{"name":"state","type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"],"description":"Filter snapshots by state.","in":"query"}},{"name":"trigger","type":"string","enum":["manual","containerTermination"],"description":"Filter snapshots by trigger.","in":"query","schema":{"name":"trigger","type":"string","enum":["manual","containerTermination"],"description":"Filter snapshots by trigger.","in":"query"}}],"responses":{"200":{"description":"A list of container snapshots.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containerSnapshots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"trigger":{"type":"string","enum":["manual","containerTermination"]},"state":{"type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"]},"source":{"type":"object","properties":{"projectId":{"type":"string"},"nfObject":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["job","service","harness","addon","volume","opentofu-job","llm-model-deployment","external-addon"]}},"required":["id","type"],"additionalProperties":false}},"required":["projectId","nfObject"],"additionalProperties":false},"target":{"type":"object","properties":{"podName":{"type":"string"}},"required":["podName"],"additionalProperties":false},"compatibility":{"type":"object","properties":{"runtime":{"type":"string","enum":["kata"]},"architecture":{"type":"string","enum":["x86","arm"]},"baseImageDigest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["runtime","architecture"],"additionalProperties":false},"parentSnapshotId":{"type":"string","format":"uuid"},"inUse":{"type":"boolean"},"result":{"type":"object","properties":{"sizeBytes":{"type":"integer","minimum":0}},"required":["sizeBytes"],"additionalProperties":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},"requestedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"lastTransitionTime":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","trigger","state","source","target","compatibility","inUse","lastTransitionTime","createdAt","updatedAt"],"additionalProperties":false}}},"required":["containerSnapshots"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Container Snapshots","team"],"security":[],"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","container-snapshots"]},"v1-container-snapshots--snapshotId--get":{"operationId":"getContainerSnapshotsSnapshotid","summary":"Get container snapshot","description":"Gets a container snapshot.","parameters":[{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path","schema":{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path"}}],"responses":{"200":{"description":"Container snapshot details.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"trigger":{"type":"string","enum":["manual","containerTermination"]},"state":{"type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"]},"source":{"type":"object","properties":{"projectId":{"type":"string"},"nfObject":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["job","service","harness","addon","volume","opentofu-job","llm-model-deployment","external-addon"]}},"required":["id","type"],"additionalProperties":false}},"required":["projectId","nfObject"],"additionalProperties":false},"target":{"type":"object","properties":{"podName":{"type":"string"}},"required":["podName"],"additionalProperties":false},"compatibility":{"type":"object","properties":{"runtime":{"type":"string","enum":["kata"]},"architecture":{"type":"string","enum":["x86","arm"]},"baseImageDigest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["runtime","architecture"],"additionalProperties":false},"parentSnapshotId":{"type":"string","format":"uuid"},"inUse":{"type":"boolean"},"result":{"type":"object","properties":{"sizeBytes":{"type":"integer","minimum":0}},"required":["sizeBytes"],"additionalProperties":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},"requestedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"lastTransitionTime":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","trigger","state","source","target","compatibility","inUse","lastTransitionTime","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Container Snapshots"],"security":[],"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","container-snapshot"]},"v1-container-snapshots--snapshotId--get-team-scoped":{"operationId":"getContainerSnapshotsSnapshotid","summary":"Get container snapshot","description":"Gets a container snapshot.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path","schema":{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path"}}],"responses":{"200":{"description":"Container snapshot details.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"trigger":{"type":"string","enum":["manual","containerTermination"]},"state":{"type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"]},"source":{"type":"object","properties":{"projectId":{"type":"string"},"nfObject":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["job","service","harness","addon","volume","opentofu-job","llm-model-deployment","external-addon"]}},"required":["id","type"],"additionalProperties":false}},"required":["projectId","nfObject"],"additionalProperties":false},"target":{"type":"object","properties":{"podName":{"type":"string"}},"required":["podName"],"additionalProperties":false},"compatibility":{"type":"object","properties":{"runtime":{"type":"string","enum":["kata"]},"architecture":{"type":"string","enum":["x86","arm"]},"baseImageDigest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["runtime","architecture"],"additionalProperties":false},"parentSnapshotId":{"type":"string","format":"uuid"},"inUse":{"type":"boolean"},"result":{"type":"object","properties":{"sizeBytes":{"type":"integer","minimum":0}},"required":["sizeBytes"],"additionalProperties":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},"requestedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"lastTransitionTime":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","trigger","state","source","target","compatibility","inUse","lastTransitionTime","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Container Snapshots","team"],"security":[],"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","container-snapshot"]},"v1-container-snapshots--snapshotId--delete":{"operationId":"deleteContainerSnapshotsSnapshotid","summary":"Delete container snapshot","description":"Soft-deletes an unreferenced terminal container snapshot.","parameters":[{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path","schema":{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path"}}],"responses":{"204":{"description":"The container snapshot is no longer accessible."},"409":{"description":"The container snapshot is active or still referenced."}},"tags":["Container Snapshots"],"security":[],"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","container-snapshot"]},"v1-container-snapshots--snapshotId--delete-team-scoped":{"operationId":"deleteContainerSnapshotsSnapshotid","summary":"Delete container snapshot","description":"Soft-deletes an unreferenced terminal container snapshot.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path","schema":{"name":"snapshotId","type":"string","format":"uuid","required":true,"description":"Container snapshot UUID","in":"path"}}],"responses":{"204":{"description":"The container snapshot is no longer accessible."},"409":{"description":"The container snapshot is active or still referenced."}},"tags":["Container Snapshots","team"],"security":[],"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","container-snapshot"]},"v1-dns-id-get":{"operationId":"getDnsId","summary":"Get DNS ID","description":"Returns the partially random string used when generating host names for the authenticated account.","parameters":[],"responses":{"200":{"description":"Data about the DNS ID.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"dns":{"type":"string","description":"The partially random string associated with the authenticated account, used for generating DNS entries.","example":"exam-1234"}},"required":["dns"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Miscellaneous"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","dns-id"]},"v1-dns-id-get-team-scoped":{"operationId":"getDnsId","summary":"Get DNS ID","description":"Returns the partially random string used when generating host names for the authenticated account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Data about the DNS ID.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"dns":{"type":"string","description":"The partially random string associated with the authenticated account, used for generating DNS entries.","example":"exam-1234"}},"required":["dns"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Miscellaneous","team"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","dns-id"]},"v1-domains-get":{"operationId":"getDomains","summary":"List domains","description":"Lists available domains","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of domains registered to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The domain name.","example":"example.com"},"status":{"type":"string","enum":["pending","verified"],"description":"The status of the domain verification.","example":"verified"},"hostname":{"type":"string","description":"The hostname to add to your domain's DNS records as a TXT record to verify the domain.","example":"nfverify1608026055"},"token":{"type":"string","description":"The token to add as the content of the TXT record to verify the domain.","example":"e596987b52855a4a773ef580ce2985d7746b37ce8b2a443d20fa27b913d8f57"},"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version configured at the domain level."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode configured at the domain level."}},"additionalProperties":false,"description":"Domain-level options for wildcard domains."}},"required":["name","status","hostname","token"],"additionalProperties":false,"description":"Details about a domain."},"description":"A list of domains registered to this account."}},"required":["domains"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","domains"]},"v1-domains-get-team-scoped":{"operationId":"getDomains","summary":"List domains","description":"Lists available domains","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of domains registered to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The domain name.","example":"example.com"},"status":{"type":"string","enum":["pending","verified"],"description":"The status of the domain verification.","example":"verified"},"hostname":{"type":"string","description":"The hostname to add to your domain's DNS records as a TXT record to verify the domain.","example":"nfverify1608026055"},"token":{"type":"string","description":"The token to add as the content of the TXT record to verify the domain.","example":"e596987b52855a4a773ef580ce2985d7746b37ce8b2a443d20fa27b913d8f57"},"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version configured at the domain level."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode configured at the domain level."}},"additionalProperties":false,"description":"Domain-level options for wildcard domains."}},"required":["name","status","hostname","token"],"additionalProperties":false,"description":"Details about a domain."},"description":"A list of domains registered to this account."}},"required":["domains"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","domains"]},"v1-domains-post":{"operationId":"postDomains","summary":"Create new domain","description":"Registers a new domain","parameters":[],"responses":{"200":{"description":"Details about the newly added domain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","description":"The domain name.","example":"example.com"},"status":{"type":"string","enum":["pending","verified"],"description":"The status of the domain verification.","example":"pending"},"hostname":{"type":"string","description":"The hostname to add to your domain's DNS records as a TXT record to verify the domain.","example":"nfverify1608026055"},"token":{"type":"string","description":"The token to add as the content of the TXT record to verify the domain.","example":"e596987b52855a4a773ef580ce2985d7746b37ce8b2a443d20fa27b913d8f57"},"redirect":{"type":"object","properties":{"mode":{"type":"string","description":"Domain redirect mode.","example":"default"},"target":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the wildcard redirect."}},"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain redirect set up."},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Load balancer all subdomains of this domain route through. Only applies to wildcard-redirect domains. `vpc` requires a self-hosted cluster with the private load balancer enabled. Fixed at creation.","example":"public"},"certificates":{"type":"object","properties":{"mode":{"type":"string","description":"Domain certificate mode.","example":"default"},"dcvRecord":{"type":"string","description":"DCV CNAME record used to provision wildcard certificates."},"dcvTarget":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the dcvRecord."}},"additionalProperties":false},"status":{"type":"object","properties":{"expiryDate":{"type":"string","format":"date-time","description":"Expiry date of the current certificate."}},"additionalProperties":false,"description":"Certificate status for wildcard domains."}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain certificate set up."},"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version configured at the domain level."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode configured at the domain level."}},"additionalProperties":false,"description":"Domain-level options for wildcard domains."}},"required":["name","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The domain is not valid, possibly because it is too long."},"409":{"description":"The domain is already registered with this account."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","pattern":"^((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+$","description":"The domain name to register.","example":"example.com"},"redirect":{"type":"object","properties":{"mode":{"type":"string","enum":["wildcard","default"],"description":"Domain redirect mode to be used.","example":"default","default":"default"},"region":{"type":"string","oneOf":[{"oneOf":[{"description":"Northflank PaaS region the wildcard redirect should be pointed at.","x-required":true}],"description":"Northflank PaaS region the wildcard redirect should be pointed at."}],"description":"Northflank PaaS region the wildcard redirect should be pointed at."},"cluster":{"type":"string","description":"BYOC cluster the wildcard redirect should be pointed at."}},"additionalProperties":false,"description":"Optional configuration regarding the domain redirect set up."},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Load balancer all subdomains of this domain route through. Only applies to wildcard-redirect domains. `vpc` requires a self-hosted cluster with the private load balancer enabled. Fixed at creation.","example":"public"},"options":{"type":"object","properties":{"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for wildcard domains. Only applicable for wildcard-redirect domains with wildcard certificates."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode for wildcard domains. Only applicable for wildcard-redirect domains with wildcard certificates."}},"additionalProperties":false},"certificates":{"type":"object","properties":{"mode":{"type":"string","enum":["wildcard","wildcard-import","default"],"description":"Certificate provisioning mode to be used.","example":"default","default":"default"},"certificateInput":{"type":"object","properties":{"certificateInput":{"type":"object","properties":{"is":{"enum":["wildcard-import"]},"then":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false}},"required":["then"],"additionalProperties":false,"description":"Certificate data - required when `mode` is set to `wildcard-import`"}},"additionalProperties":false}},"additionalProperties":false,"description":"Optional configuration regarding the domain certificate set up."}},"required":["domain"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Domains > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","domain"]},"v1-domains-post-team-scoped":{"operationId":"postDomains","summary":"Create new domain","description":"Registers a new domain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the newly added domain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","description":"The domain name.","example":"example.com"},"status":{"type":"string","enum":["pending","verified"],"description":"The status of the domain verification.","example":"pending"},"hostname":{"type":"string","description":"The hostname to add to your domain's DNS records as a TXT record to verify the domain.","example":"nfverify1608026055"},"token":{"type":"string","description":"The token to add as the content of the TXT record to verify the domain.","example":"e596987b52855a4a773ef580ce2985d7746b37ce8b2a443d20fa27b913d8f57"},"redirect":{"type":"object","properties":{"mode":{"type":"string","description":"Domain redirect mode.","example":"default"},"target":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the wildcard redirect."}},"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain redirect set up."},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Load balancer all subdomains of this domain route through. Only applies to wildcard-redirect domains. `vpc` requires a self-hosted cluster with the private load balancer enabled. Fixed at creation.","example":"public"},"certificates":{"type":"object","properties":{"mode":{"type":"string","description":"Domain certificate mode.","example":"default"},"dcvRecord":{"type":"string","description":"DCV CNAME record used to provision wildcard certificates."},"dcvTarget":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the dcvRecord."}},"additionalProperties":false},"status":{"type":"object","properties":{"expiryDate":{"type":"string","format":"date-time","description":"Expiry date of the current certificate."}},"additionalProperties":false,"description":"Certificate status for wildcard domains."}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain certificate set up."},"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version configured at the domain level."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode configured at the domain level."}},"additionalProperties":false,"description":"Domain-level options for wildcard domains."}},"required":["name","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The domain is not valid, possibly because it is too long."},"409":{"description":"The domain is already registered with this account."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","pattern":"^((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+$","description":"The domain name to register.","example":"example.com"},"redirect":{"type":"object","properties":{"mode":{"type":"string","enum":["wildcard","default"],"description":"Domain redirect mode to be used.","example":"default","default":"default"},"region":{"type":"string","oneOf":[{"oneOf":[{"description":"Northflank PaaS region the wildcard redirect should be pointed at.","x-required":true}],"description":"Northflank PaaS region the wildcard redirect should be pointed at."}],"description":"Northflank PaaS region the wildcard redirect should be pointed at."},"cluster":{"type":"string","description":"BYOC cluster the wildcard redirect should be pointed at."}},"additionalProperties":false,"description":"Optional configuration regarding the domain redirect set up."},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Load balancer all subdomains of this domain route through. Only applies to wildcard-redirect domains. `vpc` requires a self-hosted cluster with the private load balancer enabled. Fixed at creation.","example":"public"},"options":{"type":"object","properties":{"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for wildcard domains. Only applicable for wildcard-redirect domains with wildcard certificates."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode for wildcard domains. Only applicable for wildcard-redirect domains with wildcard certificates."}},"additionalProperties":false},"certificates":{"type":"object","properties":{"mode":{"type":"string","enum":["wildcard","wildcard-import","default"],"description":"Certificate provisioning mode to be used.","example":"default","default":"default"},"certificateInput":{"type":"object","properties":{"certificateInput":{"type":"object","properties":{"is":{"enum":["wildcard-import"]},"then":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false}},"required":["then"],"additionalProperties":false,"description":"Certificate data - required when `mode` is set to `wildcard-import`"}},"additionalProperties":false}},"additionalProperties":false,"description":"Optional configuration regarding the domain certificate set up."}},"required":["domain"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Domains > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","domain"]},"v1-domains--domain--get":{"operationId":"getDomainsDomain","summary":"Get domain","description":"Gets details about domain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the given domain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","description":"The domain name.","example":"example.com"},"status":{"type":"string","enum":["pending","verified"],"description":"The status of the domain verification.","example":"pending"},"hostname":{"type":"string","description":"The hostname to add to your domain's DNS records as a TXT record to verify the domain.","example":"nfverify1608026055"},"token":{"type":"string","description":"The token to add as the content of the TXT record to verify the domain.","example":"e596987b52855a4a773ef580ce2985d7746b37ce8b2a443d20fa27b913d8f57"},"redirect":{"type":"object","properties":{"mode":{"type":"string","description":"Domain redirect mode.","example":"default"},"target":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the wildcard redirect."}},"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain redirect set up."},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Load balancer all subdomains of this domain route through. Only applies to wildcard-redirect domains. `vpc` requires a self-hosted cluster with the private load balancer enabled. Fixed at creation.","example":"public"},"certificates":{"type":"object","properties":{"mode":{"type":"string","description":"Domain certificate mode.","example":"default"},"dcvRecord":{"type":"string","description":"DCV CNAME record used to provision wildcard certificates."},"dcvTarget":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the dcvRecord."}},"additionalProperties":false},"status":{"type":"object","properties":{"expiryDate":{"type":"string","format":"date-time","description":"Expiry date of the current certificate."}},"additionalProperties":false,"description":"Certificate status for wildcard domains."}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain certificate set up."},"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version configured at the domain level."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode configured at the domain level."}},"additionalProperties":false,"description":"Domain-level options for wildcard domains."},"subdomains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The subdomain added, or -default for the empty subdomain.","example":"app"},"fullName":{"type":"string","description":"The full domain including the subdomain.","example":"app.example.com"}},"required":["name","fullName"],"additionalProperties":false,"description":"Details about a subdomain."},"description":"A list of subdomains added to this domain."}},"required":["name","status","subdomains"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","domain"]},"v1-domains--domain--get-team-scoped":{"operationId":"getDomainsDomain","summary":"Get domain","description":"Gets details about domain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the given domain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","description":"The domain name.","example":"example.com"},"status":{"type":"string","enum":["pending","verified"],"description":"The status of the domain verification.","example":"pending"},"hostname":{"type":"string","description":"The hostname to add to your domain's DNS records as a TXT record to verify the domain.","example":"nfverify1608026055"},"token":{"type":"string","description":"The token to add as the content of the TXT record to verify the domain.","example":"e596987b52855a4a773ef580ce2985d7746b37ce8b2a443d20fa27b913d8f57"},"redirect":{"type":"object","properties":{"mode":{"type":"string","description":"Domain redirect mode.","example":"default"},"target":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the wildcard redirect."}},"additionalProperties":false}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain redirect set up."},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Load balancer all subdomains of this domain route through. Only applies to wildcard-redirect domains. `vpc` requires a self-hosted cluster with the private load balancer enabled. Fixed at creation.","example":"public"},"certificates":{"type":"object","properties":{"mode":{"type":"string","description":"Domain certificate mode.","example":"default"},"dcvRecord":{"type":"string","description":"DCV CNAME record used to provision wildcard certificates."},"dcvTarget":{"type":"object","properties":{"record":{"type":"string","description":"Expected CNAME target of the dcvRecord."}},"additionalProperties":false},"status":{"type":"object","properties":{"expiryDate":{"type":"string","format":"date-time","description":"Expiry date of the current certificate."}},"additionalProperties":false,"description":"Certificate status for wildcard domains."}},"required":["mode"],"additionalProperties":false,"description":"Configuration regarding the domain certificate set up."},"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version configured at the domain level."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode configured at the domain level."}},"additionalProperties":false,"description":"Domain-level options for wildcard domains."},"subdomains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The subdomain added, or -default for the empty subdomain.","example":"app"},"fullName":{"type":"string","description":"The full domain including the subdomain.","example":"app.example.com"}},"required":["name","fullName"],"additionalProperties":false,"description":"Details about a subdomain."},"description":"A list of subdomains added to this domain."}},"required":["name","status","subdomains"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","domain"]},"v1-domains--domain--patch":{"operationId":"patchDomainsDomain","summary":"Update domain","description":"Update domain options such as minimum TLS protocol version","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Domain-level TLS version can only be configured on wildcard-redirect domains with wildcard certificates."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for all subdomains under this wildcard domain."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode for all subdomains under this wildcard domain."}},"additionalProperties":false,"description":"Domain options to update."}},"required":["options"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Domains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","domain"]},"v1-domains--domain--patch-team-scoped":{"operationId":"patchDomainsDomain","summary":"Update domain","description":"Update domain options such as minimum TLS protocol version","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Domain-level TLS version can only be configured on wildcard-redirect domains with wildcard certificates."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","properties":{"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for all subdomains under this wildcard domain."},"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"TLS mode for all subdomains under this wildcard domain."}},"additionalProperties":false,"description":"Domain options to update."}},"required":["options"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Domains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","domain"]},"v1-domains--domain--delete":{"operationId":"deleteDomainsDomain","summary":"Delete domain","description":"Deletes a domain and each of its registered subdomains.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","domain"]},"v1-domains--domain--delete-team-scoped":{"operationId":"deleteDomainsDomain","summary":"Delete domain","description":"Deletes a domain and each of its registered subdomains.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","domain"]},"v1-domains--domain--certificate-get":{"operationId":"getDomainsDomainCertificate","summary":"Get domain certificate","description":"Retrieve certificate data for a domain to verify its contents.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the domain certificate.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."},"certificate":{"type":"string","description":"Certificate extracted from the certificate chain."},"issuerCertificate":{"type":"string","description":"Issuer certificate extracted from the certificate chain."},"privateKey":{"type":"string","description":"Certificate private key."}},"required":["certificateChain","certificate","issuerCertificate","privateKey"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","domain-certificate"]},"v1-domains--domain--certificate-get-team-scoped":{"operationId":"getDomainsDomainCertificate","summary":"Get domain certificate","description":"Retrieve certificate data for a domain to verify its contents.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the domain certificate.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."},"certificate":{"type":"string","description":"Certificate extracted from the certificate chain."},"issuerCertificate":{"type":"string","description":"Issuer certificate extracted from the certificate chain."},"privateKey":{"type":"string","description":"Certificate private key."}},"required":["certificateChain","certificate","issuerCertificate","privateKey"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","domain-certificate"]},"v1-domains--domain--import-post":{"operationId":"postDomainsDomainImport","summary":"Import domain certificate","description":"Import a certificate for the domain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Could not parse certificate."},"409":{"description":"Expiry date must be at least one month in the future."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"certificate":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false,"description":"Certificate to import."}},"required":["certificate"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Domains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import","domain-certificate"]},"v1-domains--domain--import-post-team-scoped":{"operationId":"postDomainsDomainImport","summary":"Import domain certificate","description":"Import a certificate for the domain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Could not parse certificate."},"409":{"description":"Expiry date must be at least one month in the future."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"certificate":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false,"description":"Certificate to import."}},"required":["certificate"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Domains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import","domain-certificate"]},"v1-domains--domain--subdomains-post":{"operationId":"postDomainsDomainSubdomains","summary":"Add subdomain","description":"Adds a new subdomain to the domain.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the newly added subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"recordType":{"type":"string","description":"The record type to use for the DNS record to verify the subdomain - always CNAME for subdomains.","example":"CNAME"},"name":{"type":"string","description":"The subdomain.","example":"site"},"fullName":{"type":"string","description":"The full domain name with subdomain","example":"site.example.com"},"content":{"type":"string","description":"The content to set the DNS record to","example":"site.example.com.user-1234.dns.northflank.app"},"verified":{"type":"boolean","description":"Whether the subdomain has been verified successfully and can be used.","example":false},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain.","default":"paths"}},"required":["recordType","name","fullName","content","verified"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The subdomain is not valid (possibly because it is too long) or the domain has not been verified."},"409":{"description":"The subdomain has already been added to this domain."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"subdomain":{"type":"string","pattern":"^\\*|^@$|^([0-9a-z]([0-9a-z-]*[0-9a-z])?\\.)*[0-9a-z]([0-9a-z-]*[0-9a-z])?$","description":"A subdomain to be added.","example":"site"},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain. Determines how traffic is routed. Once set, this cannot be changed.","default":"paths"},"cdn":{"type":"object","properties":{"northflank":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Optional CDN configuration."},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."}},"required":["subdomain"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["add","domain","subdomain"]},"v1-domains--domain--subdomains-post-team-scoped":{"operationId":"postDomainsDomainSubdomains","summary":"Add subdomain","description":"Adds a new subdomain to the domain.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the newly added subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"recordType":{"type":"string","description":"The record type to use for the DNS record to verify the subdomain - always CNAME for subdomains.","example":"CNAME"},"name":{"type":"string","description":"The subdomain.","example":"site"},"fullName":{"type":"string","description":"The full domain name with subdomain","example":"site.example.com"},"content":{"type":"string","description":"The content to set the DNS record to","example":"site.example.com.user-1234.dns.northflank.app"},"verified":{"type":"boolean","description":"Whether the subdomain has been verified successfully and can be used.","example":false},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain.","default":"paths"}},"required":["recordType","name","fullName","content","verified"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The subdomain is not valid (possibly because it is too long) or the domain has not been verified."},"409":{"description":"The subdomain has already been added to this domain."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"subdomain":{"type":"string","pattern":"^\\*|^@$|^([0-9a-z]([0-9a-z-]*[0-9a-z])?\\.)*[0-9a-z]([0-9a-z-]*[0-9a-z])?$","description":"A subdomain to be added.","example":"site"},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain. Determines how traffic is routed. Once set, this cannot be changed.","default":"paths"},"cdn":{"type":"object","properties":{"northflank":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Optional CDN configuration."},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."}},"required":["subdomain"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["add","domain","subdomain"]},"v1-domains--domain--subdomains-put":{"operationId":"putDomainsDomainSubdomains","summary":"Put subdomain","description":"Updates subdomain to the domain.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"recordType":{"type":"string","description":"The record type to use for the DNS record to verify the subdomain - always CNAME for subdomains.","example":"CNAME"},"name":{"type":"string","description":"The subdomain.","example":"site"},"fullName":{"type":"string","description":"The full domain name with subdomain","example":"site.example.com"},"content":{"type":"string","description":"The content to set the DNS record to","example":"site.example.com.user-1234.dns.northflank.app"},"verified":{"type":"boolean","description":"Whether the subdomain has been verified successfully and can be used.","example":false},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain.","default":"paths"}},"required":["recordType","name","fullName","content","verified"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The provided subdomain is not valid (possibly because it is too long) or the domain has not been verified."},"409":{"description":"The provided subdomain has already been added to this domain."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Subdomain prepended to the domain name","example":"site"},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Cluster load balancer the subdomain resolves on. Defaults to public, and cannot differ from the parent domain where that domain pins one","example":"public"},"certificateValidationMethod":{"type":"string","enum":["http","dcv","imported"],"description":"How the subdomain's TLS certificate is validated and issued. Only applies where the subdomain manages its own certificate","example":"dcv"},"certificate":{"type":"object","properties":{"certificate":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false,"description":"Certificate material - required when `certificateValidationMethod` is set to `imported`"}},"additionalProperties":false},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"cdn":{"type":"object","properties":{"northflank":{"type":"object","properties":{"enabled":{"type":"boolean"},"options":{"type":"object","properties":{"service":{"type":"object","properties":{"forceTlsEnableHsts":{"type":"boolean","default":true},"hstsDuration":{"type":"number","format":"float","minimum":300,"description":"HSTS duration. Required when `forceTlsEnableHsts` is `true`.","default":31557600},"staleIfError":{"type":"boolean","default":false},"staleIfErrorTtl":{"type":"number","format":"float","minimum":0,"default":43200},"defaultTtl":{"type":"number","format":"float","minimum":0},"passThrough":{"type":"boolean"},"bypassCredentialedRequests":{"type":"boolean","default":true}},"additionalProperties":false},"logging":{"type":"object","properties":{"enabled":{"type":"boolean","default":true}},"additionalProperties":false},"http3":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"additionalProperties":false},"websockets":{"type":"object","properties":{"enabled":{"type":"boolean","default":true}},"additionalProperties":false},"ddosProtection":{"type":"object","properties":{"enabled":{"type":"boolean","default":true}},"additionalProperties":false},"compression":{"type":"object","properties":{"enabled":{"type":"boolean"},"mode":{"type":"string","enum":["gzip","brotli"],"description":"Compression options. Required when `enabled` is `true`."}},"additionalProperties":false},"vclSnippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"type":{"type":"string","enum":["init","recv","hash","hit","miss","pass","fetch","error","deliver","log","none"]},"dynamic":{"type":"string","enum":["0","1"]},"priority":{"oneOf":[{"type":"number","format":"float","minimum":1,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true},{"type":"number","format":"float","minimum":0,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true}],"description":"Execution priority for the VCL snippet."},"content":{"type":"string"}},"required":["name","type","dynamic","content"],"additionalProperties":false},"uniqueItems":true},"cacheSettings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"action":{"type":"string","enum":["pass","cache","restart"]},"cacheCondition":{"type":"string","minLength":1,"maxLength":512},"staleTtl":{"type":"number","format":"float","minimum":0},"ttl":{"type":"number","format":"float","minimum":0}},"required":["name","cacheCondition","staleTtl","ttl"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["put","domain","subdomain"]},"v1-domains--domain--subdomains-put-team-scoped":{"operationId":"putDomainsDomainSubdomains","summary":"Put subdomain","description":"Updates subdomain to the domain.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"Details about the subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"recordType":{"type":"string","description":"The record type to use for the DNS record to verify the subdomain - always CNAME for subdomains.","example":"CNAME"},"name":{"type":"string","description":"The subdomain.","example":"site"},"fullName":{"type":"string","description":"The full domain name with subdomain","example":"site.example.com"},"content":{"type":"string","description":"The content to set the DNS record to","example":"site.example.com.user-1234.dns.northflank.app"},"verified":{"type":"boolean","description":"Whether the subdomain has been verified successfully and can be used.","example":false},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain.","default":"paths"}},"required":["recordType","name","fullName","content","verified"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The provided subdomain is not valid (possibly because it is too long) or the domain has not been verified."},"409":{"description":"The provided subdomain has already been added to this domain."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Subdomain prepended to the domain name","example":"site"},"loadBalancer":{"type":"string","enum":["public","vpc"],"description":"Cluster load balancer the subdomain resolves on. Defaults to public, and cannot differ from the parent domain where that domain pins one","example":"public"},"certificateValidationMethod":{"type":"string","enum":["http","dcv","imported"],"description":"How the subdomain's TLS certificate is validated and issued. Only applies where the subdomain manages its own certificate","example":"dcv"},"certificate":{"type":"object","properties":{"certificate":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false,"description":"Certificate material - required when `certificateValidationMethod` is set to `imported`"}},"additionalProperties":false},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"cdn":{"type":"object","properties":{"northflank":{"type":"object","properties":{"enabled":{"type":"boolean"},"options":{"type":"object","properties":{"service":{"type":"object","properties":{"forceTlsEnableHsts":{"type":"boolean","default":true},"hstsDuration":{"type":"number","format":"float","minimum":300,"description":"HSTS duration. Required when `forceTlsEnableHsts` is `true`.","default":31557600},"staleIfError":{"type":"boolean","default":false},"staleIfErrorTtl":{"type":"number","format":"float","minimum":0,"default":43200},"defaultTtl":{"type":"number","format":"float","minimum":0},"passThrough":{"type":"boolean"},"bypassCredentialedRequests":{"type":"boolean","default":true}},"additionalProperties":false},"logging":{"type":"object","properties":{"enabled":{"type":"boolean","default":true}},"additionalProperties":false},"http3":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}},"additionalProperties":false},"websockets":{"type":"object","properties":{"enabled":{"type":"boolean","default":true}},"additionalProperties":false},"ddosProtection":{"type":"object","properties":{"enabled":{"type":"boolean","default":true}},"additionalProperties":false},"compression":{"type":"object","properties":{"enabled":{"type":"boolean"},"mode":{"type":"string","enum":["gzip","brotli"],"description":"Compression options. Required when `enabled` is `true`."}},"additionalProperties":false},"vclSnippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"type":{"type":"string","enum":["init","recv","hash","hit","miss","pass","fetch","error","deliver","log","none"]},"dynamic":{"type":"string","enum":["0","1"]},"priority":{"oneOf":[{"type":"number","format":"float","minimum":1,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true},{"type":"number","format":"float","minimum":0,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true}],"description":"Execution priority for the VCL snippet."},"content":{"type":"string"}},"required":["name","type","dynamic","content"],"additionalProperties":false},"uniqueItems":true},"cacheSettings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"action":{"type":"string","enum":["pass","cache","restart"]},"cacheCondition":{"type":"string","minLength":1,"maxLength":512},"staleTtl":{"type":"number","format":"float","minimum":0},"ttl":{"type":"number","format":"float","minimum":0}},"required":["name","cacheCondition","staleTtl","ttl"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["put","domain","subdomain"]},"v1-domains--domain--subdomains--subdomain--get":{"operationId":"getDomainsDomainSubdomainsSubdomain","summary":"Get subdomain","description":"Gets details about the given subdomain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"Details about the subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"recordType":{"type":"string","description":"The record type to use for the DNS record to verify the subdomain - always CNAME for subdomains.","example":"CNAME"},"name":{"type":"string","description":"The subdomain.","example":"site"},"fullName":{"type":"string","description":"The full domain name with subdomain","example":"site.example.com"},"content":{"type":"string","description":"The content to set the DNS record to","example":"site.example.com.user-1234.dns.northflank.app"},"verified":{"type":"boolean","description":"Whether the subdomain has been verified successfully and can be used.","example":true},"loadBalancer":{"type":"string","description":"Name of the load balancer linked to this subdomain, if any.","example":"my-load-balancer"},"clusterLoadBalancer":{"type":"string","enum":["public","vpc"],"description":"Cluster load balancer the subdomain resolves on, as set by `loadBalancer` on create and update. Distinct from `loadBalancer` above, which names a linked load balancer object.","example":"public"},"certificate":{"type":"object","properties":{"inProgress":{"type":"boolean","description":"Whether a certificate is in the process of being generated"},"expiryDate":{"type":"string","format":"date-time","description":"Expiry date of the current certificate"},"refreshDare":{"type":"string","format":"date-time","description":"Refresh date of the current certificate"}},"additionalProperties":false},"certificateValidationMethod":{"type":"string","enum":["http","dcv","imported"],"description":"How the subdomain's TLS certificate is validated and issued."},"dcvRecord":{"type":"object","properties":{"record":{"type":"string","description":"CNAME record used for DCV delegation."},"target":{"type":"string","description":"Expected target of the DCV CNAME record."}},"required":["record","target"],"additionalProperties":false,"description":"DCV delegation record. Only present when certificateValidationMethod is dcv."},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain.","default":"paths"},"geoRouting":{"type":"object","properties":{"strategy":{"type":"string","enum":["continent","closest"],"description":"The geo routing strategy.","default":"continent"},"rules":{"type":"array","items":{"type":"object","properties":{"continents":{"type":"array","items":{"type":"string","enum":["NA","SA","EU","AF","AS","OC","AN"]},"description":"Continent codes this rule covers (for continent strategy)","default":[]},"backend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"required":["backend"],"additionalProperties":false},"default":[]},"defaultBackend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"required":["defaultBackend"],"additionalProperties":false,"description":"Geo routing configuration. Only present when routingMode is geoRouting."},"cdn":{"type":"object","properties":{"northflank":{"type":"object","properties":{"enabled":{"type":"boolean"},"status":{"type":"string"},"options":{"type":"object","properties":{"service":{"type":"object","properties":{"forceTlsEnableHsts":{"type":"boolean"},"hstsDuration":{"type":"number","format":"float","minimum":300,"description":"HSTS duration. Required when `forceTlsEnableHsts` is `true`.","default":31557600},"staleIfError":{"type":"boolean"},"staleIfErrorTtl":{"type":"number","format":"float","minimum":0},"defaultTtl":{"type":"number","format":"float","minimum":0},"passThrough":{"type":"boolean"},"bypassCredentialedRequests":{"type":"boolean"}},"additionalProperties":false},"logging":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"http3":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"websockets":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"ddosProtection":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"compression":{"type":"object","properties":{"enabled":{"type":"boolean"},"mode":{"type":"string","enum":["gzip","brotli"],"description":"Compression options. Required when `enabled` is `true`."}},"additionalProperties":false},"vclSnippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"type":{"type":"string","enum":["init","recv","hash","hit","miss","pass","fetch","error","deliver","log","none"]},"dynamic":{"type":"string","enum":["0","1"]},"priority":{"oneOf":[{"type":"number","format":"float","minimum":0,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true}],"description":"Execution priority for the VCL snippet."},"content":{"type":"string"}},"required":["name","type","dynamic","content"],"additionalProperties":false},"uniqueItems":true},"cacheSettings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"action":{"type":"string","enum":["pass","cache","restart"]},"cacheCondition":{"type":"string","maxLength":512},"staleTtl":{"type":"number","format":"float","minimum":0},"ttl":{"type":"number","format":"float","minimum":0}},"required":["name","staleTtl","ttl"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"deployedAt":{"type":"string","format":"date-time"}},"additionalProperties":false}},"additionalProperties":false}},"required":["recordType","name","fullName","content","verified"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","subdomain"]},"v1-domains--domain--subdomains--subdomain--get-team-scoped":{"operationId":"getDomainsDomainSubdomainsSubdomain","summary":"Get subdomain","description":"Gets details about the given subdomain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"Details about the subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"recordType":{"type":"string","description":"The record type to use for the DNS record to verify the subdomain - always CNAME for subdomains.","example":"CNAME"},"name":{"type":"string","description":"The subdomain.","example":"site"},"fullName":{"type":"string","description":"The full domain name with subdomain","example":"site.example.com"},"content":{"type":"string","description":"The content to set the DNS record to","example":"site.example.com.user-1234.dns.northflank.app"},"verified":{"type":"boolean","description":"Whether the subdomain has been verified successfully and can be used.","example":true},"loadBalancer":{"type":"string","description":"Name of the load balancer linked to this subdomain, if any.","example":"my-load-balancer"},"clusterLoadBalancer":{"type":"string","enum":["public","vpc"],"description":"Cluster load balancer the subdomain resolves on, as set by `loadBalancer` on create and update. Distinct from `loadBalancer` above, which names a linked load balancer object.","example":"public"},"certificate":{"type":"object","properties":{"inProgress":{"type":"boolean","description":"Whether a certificate is in the process of being generated"},"expiryDate":{"type":"string","format":"date-time","description":"Expiry date of the current certificate"},"refreshDare":{"type":"string","format":"date-time","description":"Refresh date of the current certificate"}},"additionalProperties":false},"certificateValidationMethod":{"type":"string","enum":["http","dcv","imported"],"description":"How the subdomain's TLS certificate is validated and issued."},"dcvRecord":{"type":"object","properties":{"record":{"type":"string","description":"CNAME record used for DCV delegation."},"target":{"type":"string","description":"Expected target of the DCV CNAME record."}},"required":["record","target"],"additionalProperties":false,"description":"DCV delegation record. Only present when certificateValidationMethod is dcv."},"options":{"type":"object","properties":{"tlsMode":{"type":"string","enum":["default","passthrough"],"description":"Desired TLS mode for the subdomain.","default":"default"},"minTlsProtocolVersion":{"type":"string","enum":["TLSV1_1","TLSV1_2","TLSV1_3"],"description":"Minimum TLS protocol version for the subdomain. Only applicable for non-wildcard subdomains."},"autoVerify":{"type":"boolean","description":"The domain will be automatically verified on creation. Only configurable if the relevant feature flag is enabled for you account."},"aliasDomains":{"type":"array","items":{"type":"string"},"description":"Alias domains which should be routable. Only configurable if the relevant feature flag is enabled for you account.","default":[]}},"additionalProperties":false,"description":"Optional advanced configuration for the subdomain."},"routingMode":{"type":"string","enum":["paths","geoRouting","loadBalancerSubdomain"],"description":"The routing mode for the subdomain.","default":"paths"},"geoRouting":{"type":"object","properties":{"strategy":{"type":"string","enum":["continent","closest"],"description":"The geo routing strategy.","default":"continent"},"rules":{"type":"array","items":{"type":"object","properties":{"continents":{"type":"array","items":{"type":"string","enum":["NA","SA","EU","AF","AS","OC","AN"]},"description":"Continent codes this rule covers (for continent strategy)","default":[]},"backend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"required":["backend"],"additionalProperties":false},"default":[]},"defaultBackend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"required":["defaultBackend"],"additionalProperties":false,"description":"Geo routing configuration. Only present when routingMode is geoRouting."},"cdn":{"type":"object","properties":{"northflank":{"type":"object","properties":{"enabled":{"type":"boolean"},"status":{"type":"string"},"options":{"type":"object","properties":{"service":{"type":"object","properties":{"forceTlsEnableHsts":{"type":"boolean"},"hstsDuration":{"type":"number","format":"float","minimum":300,"description":"HSTS duration. Required when `forceTlsEnableHsts` is `true`.","default":31557600},"staleIfError":{"type":"boolean"},"staleIfErrorTtl":{"type":"number","format":"float","minimum":0},"defaultTtl":{"type":"number","format":"float","minimum":0},"passThrough":{"type":"boolean"},"bypassCredentialedRequests":{"type":"boolean"}},"additionalProperties":false},"logging":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"http3":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"websockets":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"ddosProtection":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"compression":{"type":"object","properties":{"enabled":{"type":"boolean"},"mode":{"type":"string","enum":["gzip","brotli"],"description":"Compression options. Required when `enabled` is `true`."}},"additionalProperties":false},"vclSnippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"type":{"type":"string","enum":["init","recv","hash","hit","miss","pass","fetch","error","deliver","log","none"]},"dynamic":{"type":"string","enum":["0","1"]},"priority":{"oneOf":[{"type":"number","format":"float","minimum":0,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true}],"description":"Execution priority for the VCL snippet."},"content":{"type":"string"}},"required":["name","type","dynamic","content"],"additionalProperties":false},"uniqueItems":true},"cacheSettings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"action":{"type":"string","enum":["pass","cache","restart"]},"cacheCondition":{"type":"string","maxLength":512},"staleTtl":{"type":"number","format":"float","minimum":0},"ttl":{"type":"number","format":"float","minimum":0}},"required":["name","staleTtl","ttl"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false},"deployedAt":{"type":"string","format":"date-time"}},"additionalProperties":false}},"additionalProperties":false}},"required":["recordType","name","fullName","content","verified"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","subdomain"]},"v1-domains--domain--subdomains--subdomain--delete":{"operationId":"deleteDomainsDomainSubdomainsSubdomain","summary":"Delete subdomain","description":"Removes a subdomain from a domain.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The default (empty) subdomain cannot be deleted."},"404":{"description":"The subdomain does not exist."}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","subdomain"]},"v1-domains--domain--subdomains--subdomain--delete-team-scoped":{"operationId":"deleteDomainsDomainSubdomainsSubdomain","summary":"Delete subdomain","description":"Removes a subdomain from a domain.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"The default (empty) subdomain cannot be deleted."},"404":{"description":"The subdomain does not exist."}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","subdomain"]},"v1-domains--domain--subdomains--subdomain--assign-post":{"operationId":"postDomainsDomainSubdomainsSubdomainAssign","summary":"Assign service to subdomain","description":"Assigns a service port to the given subdomain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"serviceId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the service to assign the subdomain to.","example":"example-service"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the project the service belongs to.","example":"default-project"},"portName":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name of the port that will be assigned to the subdomain.","example":"p01"}},"required":["serviceId","projectId","portName"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["assign","subdomain","service"]},"v1-domains--domain--subdomains--subdomain--assign-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainAssign","summary":"Assign service to subdomain","description":"Assigns a service port to the given subdomain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"serviceId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the service to assign the subdomain to.","example":"example-service"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the project the service belongs to.","example":"default-project"},"portName":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name of the port that will be assigned to the subdomain.","example":"p01"}},"required":["serviceId","projectId","portName"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["assign","subdomain","service"]},"v1-domains--domain--subdomains--subdomain--assign-delete":{"operationId":"deleteDomainsDomainSubdomainsSubdomainAssign","summary":"Unassign subdomain","description":"Removes a subdomain from its assigned service","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"unassignPaths","type":"boolean","description":"Unassign all associated subdomain paths from their respective services.","in":"query","schema":{"name":"unassignPaths","type":"boolean","description":"Unassign all associated subdomain paths from their respective services.","in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["unassign","subdomain"]},"v1-domains--domain--subdomains--subdomain--assign-delete-team-scoped":{"operationId":"deleteDomainsDomainSubdomainsSubdomainAssign","summary":"Unassign subdomain","description":"Removes a subdomain from its assigned service","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"unassignPaths","type":"boolean","description":"Unassign all associated subdomain paths from their respective services.","in":"query","schema":{"name":"unassignPaths","type":"boolean","description":"Unassign all associated subdomain paths from their respective services.","in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["unassign","subdomain"]},"v1-domains--domain--subdomains--subdomain--cdn-disable-post":{"operationId":"postDomainsDomainSubdomainsSubdomainCdnDisable","summary":"Remove CDN from a subdomain","description":"Removes the CDN integration from the given subdomain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider for which the CDN on the subdomain should be disabled.","example":"northflank"}},"required":["provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["disable","subdomain","cdn"]},"v1-domains--domain--subdomains--subdomain--cdn-disable-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainCdnDisable","summary":"Remove CDN from a subdomain","description":"Removes the CDN integration from the given subdomain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider for which the CDN on the subdomain should be disabled.","example":"northflank"}},"required":["provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["disable","subdomain","cdn"]},"v1-domains--domain--subdomains--subdomain--cdn-enable-post":{"operationId":"postDomainsDomainSubdomainsSubdomainCdnEnable","summary":"Enable CDN on a subdomain","description":"Enables a CDN integration on the given subdomain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider for which a CDN on the subdomain should be enabled.","example":"northflank"},"options":{"oneOf":[{"type":"object","properties":{"service":{"type":"object","properties":{"forceTlsEnableHsts":{"type":"boolean"},"hstsDuration":{"type":"number","format":"float","minimum":300,"description":"HSTS duration. Required when `forceTlsEnableHsts` is `true`.","default":31557600},"staleIfError":{"type":"boolean"},"staleIfErrorTtl":{"type":"number","format":"float","minimum":0},"defaultTtl":{"type":"number","format":"float","minimum":0},"passThrough":{"type":"boolean"},"bypassCredentialedRequests":{"type":"boolean"}},"additionalProperties":false},"logging":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"http3":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"websockets":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"ddosProtection":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"compression":{"type":"object","properties":{"enabled":{"type":"boolean"},"mode":{"type":"string","enum":["gzip","brotli"],"description":"Compression options. Required when `enabled` is `true`."}},"additionalProperties":false},"vclSnippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"type":{"type":"string","enum":["init","recv","hash","hit","miss","pass","fetch","error","deliver","log","none"]},"dynamic":{"type":"string","enum":["0","1"]},"priority":{"oneOf":[{"type":"number","format":"float","minimum":0,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true}],"description":"Execution priority for the VCL snippet."},"content":{"type":"string"}},"required":["name","type","dynamic","content"],"additionalProperties":false},"uniqueItems":true},"cacheSettings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"action":{"type":"string","enum":["pass","cache","restart"]},"cacheCondition":{"type":"string","maxLength":512},"staleTtl":{"type":"number","format":"float","minimum":0},"ttl":{"type":"number","format":"float","minimum":0}},"required":["name","staleTtl","ttl"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false,"description":"Configuration options for the Northflank CDN."}],"description":"CDN configuration options for the selected provider."}},"required":["provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["enable","subdomain","cdn"]},"v1-domains--domain--subdomains--subdomain--cdn-enable-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainCdnEnable","summary":"Enable CDN on a subdomain","description":"Enables a CDN integration on the given subdomain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider for which a CDN on the subdomain should be enabled.","example":"northflank"},"options":{"oneOf":[{"type":"object","properties":{"service":{"type":"object","properties":{"forceTlsEnableHsts":{"type":"boolean"},"hstsDuration":{"type":"number","format":"float","minimum":300,"description":"HSTS duration. Required when `forceTlsEnableHsts` is `true`.","default":31557600},"staleIfError":{"type":"boolean"},"staleIfErrorTtl":{"type":"number","format":"float","minimum":0},"defaultTtl":{"type":"number","format":"float","minimum":0},"passThrough":{"type":"boolean"},"bypassCredentialedRequests":{"type":"boolean"}},"additionalProperties":false},"logging":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"http3":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"websockets":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"ddosProtection":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"compression":{"type":"object","properties":{"enabled":{"type":"boolean"},"mode":{"type":"string","enum":["gzip","brotli"],"description":"Compression options. Required when `enabled` is `true`."}},"additionalProperties":false},"vclSnippets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"type":{"type":"string","enum":["init","recv","hash","hit","miss","pass","fetch","error","deliver","log","none"]},"dynamic":{"type":"string","enum":["0","1"]},"priority":{"oneOf":[{"type":"number","format":"float","minimum":0,"maximum":100,"description":"Execution priority for the VCL snippet.","x-required":true}],"description":"Execution priority for the VCL snippet."},"content":{"type":"string"}},"required":["name","type","dynamic","content"],"additionalProperties":false},"uniqueItems":true},"cacheSettings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"action":{"type":"string","enum":["pass","cache","restart"]},"cacheCondition":{"type":"string","maxLength":512},"staleTtl":{"type":"number","format":"float","minimum":0},"ttl":{"type":"number","format":"float","minimum":0}},"required":["name","staleTtl","ttl"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false,"description":"Configuration options for the Northflank CDN."}],"description":"CDN configuration options for the selected provider."}},"required":["provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["enable","subdomain","cdn"]},"v1-domains--domain--subdomains--subdomain--cdn-purge-post":{"operationId":"postDomainsDomainSubdomainsSubdomainCdnPurge","summary":"Purge CDN cache for a subdomain","description":"Purges the CDN cache for the given subdomain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider for which the CDN cache on the subdomain should be purged.","example":"northflank"}},"required":["provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["purge","subdomain","cdn"]},"v1-domains--domain--subdomains--subdomain--cdn-purge-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainCdnPurge","summary":"Purge CDN cache for a subdomain","description":"Purges the CDN cache for the given subdomain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider for which the CDN cache on the subdomain should be purged.","example":"northflank"}},"required":["provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["purge","subdomain","cdn"]},"v1-domains--domain--subdomains--subdomain--certificate-import-post":{"operationId":"postDomainsDomainSubdomainsSubdomainCertificateImport","summary":"Import subdomain certificate","description":"Import a certificate for a subdomain of a domain using individual certificates.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Could not parse certificate."},"409":{"description":"The certificate does not cover the subdomain, its expiry is under a month away, or the subdomain inherits its certificate from the parent domain."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"certificate":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false,"description":"Certificate to import."}},"required":["certificate"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import","subdomain-certificate"]},"v1-domains--domain--subdomains--subdomain--certificate-import-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainCertificateImport","summary":"Import subdomain certificate","description":"Import a certificate for a subdomain of a domain using individual certificates.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Could not parse certificate."},"409":{"description":"The certificate does not cover the subdomain, its expiry is under a month away, or the subdomain inherits its certificate from the parent domain."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"certificate":{"type":"object","properties":{"privateKey":{"type":"string","description":"Certificate private key."},"certificateChain":{"type":"string","description":"Certificate chain. May consist of one or more certificates."}},"required":["privateKey","certificateChain"],"additionalProperties":false,"description":"Certificate to import."}},"required":["certificate"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import","subdomain-certificate"]},"v1-domains--domain--subdomains--subdomain--geo-routing-patch":{"operationId":"patchDomainsDomainSubdomainsSubdomainGeoRouting","summary":"Update geo routing configuration","description":"Updates the geo routing configuration for a geo-routed subdomain.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"geoRouting":{"type":"object","properties":{"strategy":{"type":"string","enum":["continent","closest"],"description":"The geo routing strategy."},"rules":{"type":"array","items":{"type":"object","properties":{"continents":{"type":"array","items":{"type":"string","enum":["NA","SA","EU","AF","AS","OC","AN"]},"description":"Continent codes this rule covers (for continent strategy)","default":[]},"backend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"required":["backend"],"additionalProperties":false}},"defaultBackend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"additionalProperties":false,"description":"The geo routing configuration fields to update."}},"required":["geoRouting"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","subdomain","geo-routing"]},"v1-domains--domain--subdomains--subdomain--geo-routing-patch-team-scoped":{"operationId":"patchDomainsDomainSubdomainsSubdomainGeoRouting","summary":"Update geo routing configuration","description":"Updates the geo routing configuration for a geo-routed subdomain.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"geoRouting":{"type":"object","properties":{"strategy":{"type":"string","enum":["continent","closest"],"description":"The geo routing strategy."},"rules":{"type":"array","items":{"type":"object","properties":{"continents":{"type":"array","items":{"type":"string","enum":["NA","SA","EU","AF","AS","OC","AN"]},"description":"Continent codes this rule covers (for continent strategy)","default":[]},"backend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"required":["backend"],"additionalProperties":false}},"defaultBackend":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectInternalId}/{serviceInternalId}","example":"my-project/my-service"},"port":{"type":"string","description":"Port name on the backend service","example":"http"}},"required":["id","port"],"additionalProperties":false}},"additionalProperties":false,"description":"The geo routing configuration fields to update."}},"required":["geoRouting"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","subdomain","geo-routing"]},"v1-domains--domain--subdomains--subdomain--paths-post":{"operationId":"postDomainsDomainSubdomainsSubdomainPaths","summary":"Add subdomain path","description":"Adds a new path to the subdomain.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"Details about the newly added path.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false},"name":{"type":"string","description":"The full URL including subdomain and path URI."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["mode","uri"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The path has already been added to this subdomain."}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false}},"required":["mode","uri"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > SubdomainPaths > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainPaths","summary":"Add subdomain path","description":"Adds a new path to the subdomain.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"Details about the newly added path.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false},"name":{"type":"string","description":"The full URL including subdomain and path URI."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["mode","uri"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The path has already been added to this subdomain."}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false}},"required":["mode","uri"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > SubdomainPaths > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths-get":{"operationId":"getDomainsDomainSubdomainsSubdomainPaths","summary":"List subdomain paths","description":"List paths for a given subdomain.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"A list of paths for the given subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"object","properties":{"subdomain":{"type":"string","pattern":"^\\*|^@$|^([0-9a-z]([0-9a-z-]*[0-9a-z])?\\.)*[0-9a-z]([0-9a-z-]*[0-9a-z])?$","description":"The domain the path should be created for.","example":"site.example.com"},"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false},"name":{"type":"string","description":"The full URL including subdomain and path URI."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["subdomain","mode","uri"],"additionalProperties":false,"description":"Details about a subdomain path."},"description":"A list of paths created for the given subdomain."}},"required":["paths"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths-get-team-scoped":{"operationId":"getDomainsDomainSubdomainsSubdomainPaths","summary":"List subdomain paths","description":"List paths for a given subdomain.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"A list of paths for the given subdomain.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"paths":{"type":"array","items":{"type":"object","properties":{"subdomain":{"type":"string","pattern":"^\\*|^@$|^([0-9a-z]([0-9a-z-]*[0-9a-z])?\\.)*[0-9a-z]([0-9a-z-]*[0-9a-z])?$","description":"The domain the path should be created for.","example":"site.example.com"},"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false},"name":{"type":"string","description":"The full URL including subdomain and path URI."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["subdomain","mode","uri"],"additionalProperties":false,"description":"Details about a subdomain path."},"description":"A list of paths created for the given subdomain."}},"required":["paths"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--get":{"operationId":"getDomainsDomainSubdomainsSubdomainPathsSubdomainpath","summary":"Get subdomain path","description":"Get subdomain path details.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"Details about subdomain path.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false},"name":{"type":"string","description":"The full URL including subdomain and path URI."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"assignment":{"type":"object","properties":{"project":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the service to assign the subdomain path to.","example":"default-project"},"service":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the project the service belongs to.","example":"example-service"},"port":{"type":"string","description":"The name of the port that will be assigned to the subdomain path.","example":"p01"}},"required":["project","service","port"],"additionalProperties":false,"description":"Data about the subdomain path assignment."}},"required":["mode","uri"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"Path not found."}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--get-team-scoped":{"operationId":"getDomainsDomainSubdomainsSubdomainPathsSubdomainpath","summary":"Get subdomain path","description":"Get subdomain path details.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"Details about subdomain path.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"uri":{"type":"string","description":"URI of the subdomain path. Interpreted according to the selected path mode","example":"/"},"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false},"name":{"type":"string","description":"The full URL including subdomain and path URI."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"assignment":{"type":"object","properties":{"project":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the service to assign the subdomain path to.","example":"default-project"},"service":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the project the service belongs to.","example":"example-service"},"port":{"type":"string","description":"The name of the port that will be assigned to the subdomain path.","example":"p01"}},"required":["project","service","port"],"additionalProperties":false,"description":"Data about the subdomain path assignment."}},"required":["mode","uri"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"Path not found."}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--delete":{"operationId":"deleteDomainsDomainSubdomainsSubdomainPathsSubdomainpath","summary":"Delete subdomain path","description":"Delete a path.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--delete-team-scoped":{"operationId":"deleteDomainsDomainSubdomainsSubdomainPathsSubdomainpath","summary":"Delete subdomain path","description":"Delete a path.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--post":{"operationId":"postDomainsDomainSubdomainsSubdomainPathsSubdomainpath","summary":"Update subdomain path","description":"Update a subdomain path.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainPathsSubdomainpath","summary":"Update subdomain path","description":"Update a subdomain path.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","properties":{"priority":{"type":"integer","minimum":0,"maximum":100,"description":"In case of uri conflicts, the route with the higher priority will take precedence","example":0},"ignoreUriCase":{"type":"boolean","description":"Allows case insensitive matching for 'prefix' and 'exact' modes"},"rewrite":{"oneOf":[{"type":"object","properties":{"uri":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"}},"required":["uri"],"additionalProperties":false,"description":"Rewrite with URI"},{"type":"object","properties":{"regex":{"type":"object","properties":{"match":{"type":"string","description":"Regex match for the given path"},"rewrite":{"type":"string","description":"Regex rewrite for the given matched path"}},"required":["match","rewrite"],"additionalProperties":false}},"additionalProperties":false,"description":"Rewrite with regex"}],"description":"Settings determining if a path should be rewritten. Either a uri or regex have to be specified."},"timeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Customised request timeout for the given path. By default no timeout is set."},"headers":{"type":"object","properties":{"request":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false},"response":{"type":"object","properties":{"set":{"type":"object","properties":{},"additionalProperties":false},"add":{"type":"object","properties":{},"additionalProperties":false},"remove":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$"}}},"additionalProperties":false}},"additionalProperties":false,"description":"Settings allowing addition, re-write and removal of request as well as response headers."},"corsPolicy":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowOrigins":{"type":"array","items":{"type":"object","properties":{"mode":{"type":"string","enum":["prefix","exact","regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"origin":{"type":"string","description":"Origin definition.","example":"https://example.com"}},"required":["mode"],"additionalProperties":false}},"allowMethods":{"type":"array","items":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS","TRACE","CONNECT","HEAD"]}},"allowCredentials":{"type":"boolean"},"allowHeaders":{"type":"array","items":{"type":"string"}},"maxAge":{"type":"string","pattern":"^[1-9][0-9]*(s|m|h)$"}},"required":["enabled"],"additionalProperties":false,"description":"Settings allowing for customization of CORS policies."},"retries":{"type":"object","properties":{"enabled":{"type":"boolean"},"attempts":{"type":"integer","minimum":1,"maximum":3},"perTryTimeout":{"type":"string","pattern":"^[1-9][0-9]*(s|ms)$","description":"Timeout per attempt. By default uses the path level timeout."},"retryOn":{"type":"array","items":{"type":"string","enum":["5xx","gateway-error","reset","connect-failure","envoy-ratelimited","retriable-4xx","refused-stream","retriable-status-codes","retriable-headers","cancelled","deadline-exceeded","internal","resource-exhausted","unavailable"]},"uniqueItems":true,"description":"Configure the cases in which the retry should be triggered."}},"required":["enabled","attempts"],"additionalProperties":false,"description":"Settings allowing for customization of retries."}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-post":{"operationId":"postDomainsDomainSubdomainsSubdomainPathsSubdomainpathAssign","summary":"Assign subdomain path","description":"Assign a subdomain path to a port.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"assignment":{"type":"object","properties":{"project":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the service to assign the subdomain path to.","example":"default-project"},"service":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the project the service belongs to.","example":"example-service"},"port":{"type":"string","description":"The name of the port that will be assigned to the subdomain path.","example":"p01"}},"required":["project","service","port"],"additionalProperties":false,"description":"Data about the subdomain path assignment."}},"required":["assignment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["assign","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainPathsSubdomainpathAssign","summary":"Assign subdomain path","description":"Assign a subdomain path to a port.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"assignment":{"type":"object","properties":{"project":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the service to assign the subdomain path to.","example":"default-project"},"service":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The ID of the project the service belongs to.","example":"example-service"},"port":{"type":"string","description":"The name of the port that will be assigned to the subdomain path.","example":"p01"}},"required":["project","service","port"],"additionalProperties":false,"description":"Data about the subdomain path assignment."}},"required":["assignment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["assign","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-delete":{"operationId":"deleteDomainsDomainSubdomainsSubdomainPathsSubdomainpathAssign","summary":"Unassign subdomain path","description":"Unassign a subdomain path to a port.","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["unassign","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--paths--subdomainPath--assign-delete-team-scoped":{"operationId":"deleteDomainsDomainSubdomainsSubdomainPathsSubdomainpathAssign","summary":"Unassign subdomain path","description":"Unassign a subdomain path to a port.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}},{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path","schema":{"name":"subdomainPath","type":"string","required":true,"description":"Name of the path","example":"/","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > SubdomainPaths > Update","x-nf-team-scoped":true,"x-nf-cli-command":["unassign","subdomain","path"]},"v1-domains--domain--subdomains--subdomain--verify-post":{"operationId":"postDomainsDomainSubdomainsSubdomainVerify","summary":"Verify subdomain","description":"Gets details about the given subdomain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Failed to verify the subdomain."}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["verify","subdomain"]},"v1-domains--domain--subdomains--subdomain--verify-post-team-scoped":{"operationId":"postDomainsDomainSubdomainsSubdomainVerify","summary":"Verify subdomain","description":"Gets details about the given subdomain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}},{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path","schema":{"name":"subdomain","type":"string","required":true,"description":"Name of the subdomain","example":"app","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Failed to verify the subdomain."}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Subdomains > Update","x-nf-team-scoped":true,"x-nf-cli-command":["verify","subdomain"]},"v1-domains--domain--verify-post":{"operationId":"postDomainsDomainVerify","summary":"Verify domain","description":"Attempts to verify the domain","parameters":[{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Failed to verify the domain."}},"tags":["Domains"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Create","x-nf-team-scoped":true,"x-nf-cli-command":["verify","domain"]},"v1-domains--domain--verify-post-team-scoped":{"operationId":"postDomainsDomainVerify","summary":"Verify domain","description":"Attempts to verify the domain","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path","schema":{"name":"domain","type":"string","required":true,"description":"Name of the domain","example":"example.com","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Failed to verify the domain."}},"tags":["Domains","team"],"security":[],"x-nf-permission-required":"Account > Networking > Domains > Create","x-nf-team-scoped":true,"x-nf-cli-command":["verify","domain"]},"v1-egress-ips-get":{"operationId":"getEgressIps","summary":"List egress IPs","description":"Gets a list of egress IPs belonging to the team","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of egress IPs belonging to the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"egressIps":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["name","spec","id","createdAt","updatedAt"],"additionalProperties":false,"description":"An egress IP object."},"description":"An array of egress IPs."}},"required":["egressIps"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs"],"security":[],"x-nf-permission-required":"Account > Networking > EgressIps > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","egress-ips"]},"v1-egress-ips-get-team-scoped":{"operationId":"getEgressIps","summary":"List egress IPs","description":"Gets a list of egress IPs belonging to the team","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of egress IPs belonging to the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"egressIps":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["name","spec","id","createdAt","updatedAt"],"additionalProperties":false,"description":"An egress IP object."},"description":"An array of egress IPs."}},"required":["egressIps"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs","team"],"security":[],"x-nf-permission-required":"Account > Networking > EgressIps > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","egress-ips"]},"v1-egress-ips-post":{"operationId":"postEgressIps","summary":"Create egress IP","description":"Creates a new egress IP","parameters":[],"responses":{"200":{"description":"Details about the newly created egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > EgressIps > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","egress-ip"]},"v1-egress-ips-post-team-scoped":{"operationId":"postEgressIps","summary":"Create egress IP","description":"Creates a new egress IP","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the newly created egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > EgressIps > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","egress-ip"]},"v1-egress-ips-put":{"operationId":"putEgressIps","summary":"Put egress IP","description":"Creates or updates an egress IP","parameters":[],"responses":{"200":{"description":"Details about the created or updated egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > EgressIps > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","egress-ip"]},"v1-egress-ips-put-team-scoped":{"operationId":"putEgressIps","summary":"Put egress IP","description":"Creates or updates an egress IP","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created or updated egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > EgressIps > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","egress-ip"]},"v1-egress-ips--egressIpId--get":{"operationId":"getEgressIpsEgressipid","summary":"Get egress IP","description":"Gets information about the given egress IP","parameters":[{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path","schema":{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path"}}],"responses":{"200":{"description":"Details about the egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs"],"security":[],"x-nf-permission-required":"Account > Networking > EgressIps > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","egress-ip"]},"v1-egress-ips--egressIpId--get-team-scoped":{"operationId":"getEgressIpsEgressipid","summary":"Get egress IP","description":"Gets information about the given egress IP","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path","schema":{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path"}}],"responses":{"200":{"description":"Details about the egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs","team"],"security":[],"x-nf-permission-required":"Account > Networking > EgressIps > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","egress-ip"]},"v1-egress-ips--egressIpId--patch":{"operationId":"patchEgressIpsEgressipid","summary":"Patch egress IP","description":"Updates an egress IP","parameters":[{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path","schema":{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path"}}],"responses":{"200":{"description":"Details about the updated egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > EgressIps > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","egress-ip"]},"v1-egress-ips--egressIpId--patch-team-scoped":{"operationId":"patchEgressIpsEgressipid","summary":"Patch egress IP","description":"Updates an egress IP","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path","schema":{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path"}}],"responses":{"200":{"description":"Details about the updated egress IP.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the egress IP","example":"my-egress-ip"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"},"state":{"type":"object","properties":{"ipAddress":{"type":"string","description":"Assigned public IP address","example":"34.105.225.71"},"status":{"type":"string","enum":["staging","loading","active","error","deleting","deleted"],"description":"Current status of the egress IP","example":"active"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the egress IP was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the egress IP was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the egress IP.","example":"my-egress-ip"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the egress IP.","example":"This is a new egress IP."},"spec":{"type":"object","properties":{"provisioningMode":{"type":"string","enum":["shared","dedicated"],"description":"Provisioning mode for the egress IP: shared (uses pre-provisioned infrastructure) or dedicated","example":"shared"},"region":{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west"},"mode":{"type":"string","enum":["include","exclude","selector"],"description":"Mode: 'include' (only these projects/resources use this egress IP), 'exclude' (all except these use it), or 'selector' (network-policy-style selector targeting). The selector/rules distinction is immutable after creation.","example":"include","default":"include"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Project internal ID"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restrictions scoping the rule to specific resources should be applied."},"resources":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["service","job"],"description":"Resource type"},"id":{"type":"string","description":"Resource internal ID"}},"required":["type","id"],"additionalProperties":false},"description":"Resources the rule should be restricted to "}},"required":["enabled"],"additionalProperties":false,"description":"Rule restrictions"}},"required":["id","restrictions"],"additionalProperties":false,"description":"Egress IP rule"},"description":"Egress IP rules - array of projects the rule applies to","default":[]},"selector":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope the selector to specific projects"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"Project internal IDs to include/exclude"},"restrictionMode":{"type":"string","enum":["in","notIn"],"description":"Whether listed projects are included (in) or excluded (notIn)"}},"required":["enabled","items","restrictionMode"],"additionalProperties":false,"description":"Project scope for the selector"},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to scope to workloads carrying the given tags"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":10,"description":"Tag internal IDs to match workloads against"},"matchCondition":{"type":"string","enum":["or","and"],"description":"Match any (or) or all (and) of the given tags"}},"required":["enabled","items","matchCondition"],"additionalProperties":false,"description":"Workload (tag) scope for the selector"}},"required":["projects","tags"],"additionalProperties":false,"description":"Selector-based targeting. Requires mode: 'selector' and is mutually exclusive with rules (enforced on write)."}},"required":["provisioningMode","region"],"additionalProperties":false,"description":"Egress IP specification"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > EgressIps > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","egress-ip"]},"v1-egress-ips--egressIpId--delete":{"operationId":"deleteEgressIpsEgressipid","summary":"Delete egress IP","description":"Deletes the given egress IP.","parameters":[{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path","schema":{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs"],"security":[],"x-nf-permission-required":"Account > Networking > EgressIps > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","egress-ip"]},"v1-egress-ips--egressIpId--delete-team-scoped":{"operationId":"deleteEgressIpsEgressipid","summary":"Delete egress IP","description":"Deletes the given egress IP.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path","schema":{"name":"egressIpId","type":"string","required":true,"description":"ID of the egress IP","example":"my-egress-ip","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Egress IPs","team"],"security":[],"x-nf-permission-required":"Account > Networking > EgressIps > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","egress-ip"]},"v1-encryption-configurations-get":{"operationId":"getEncryptionConfigurations","summary":"List encryption configurations","description":"Lists customer-visible encryption configurations and the current encryption mode for the authenticated team or organization, including retained and legacy Vault configurations. Credentials and internal Northflank-managed configurations are never returned.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Encryption configurations.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"encryptionConfigurations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false}},"encryptionMode":{"type":"string","enum":["default","northflank-envelope","customer-managed"],"description":"Encryption used for new writes: legacy Northflank default, Northflank-managed envelope, or a customer-managed configuration. Customer-managed includes envelope KMS and legacy Vault configurations; legacy Vault data cannot be migrated through DEK migration."}},"required":["encryptionConfigurations","encryptionMode"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","encryption","configurations"]},"v1-encryption-configurations-get-team-scoped":{"operationId":"getEncryptionConfigurations","summary":"List encryption configurations","description":"Lists customer-visible encryption configurations and the current encryption mode for the authenticated team or organization, including retained and legacy Vault configurations. Credentials and internal Northflank-managed configurations are never returned.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Encryption configurations.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"encryptionConfigurations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false}},"encryptionMode":{"type":"string","enum":["default","northflank-envelope","customer-managed"],"description":"Encryption used for new writes: legacy Northflank default, Northflank-managed envelope, or a customer-managed configuration. Customer-managed includes envelope KMS and legacy Vault configurations; legacy Vault data cannot be migrated through DEK migration."}},"required":["encryptionConfigurations","encryptionMode"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","encryption","configurations"]},"v1-encryption-configurations-post":{"operationId":"postEncryptionConfigurations","summary":"Create encryption configuration","description":"Creates an inactive configuration after validating KMS access. GCP cross-project creation defers that check and returns a generated service-account email: grant it KMS access before activation. Requires customer-managed keys to be enabled.","parameters":[],"responses":{"200":{"description":"Created configuration without credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration or failed KMS check."},"409":{"description":"An encryption configuration with this name already exists."}},"tags":["Encryption Configurations","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"enum":["gcp"]},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$"},"location":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":63},"keyRing":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"cryptoKey":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string"}},"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"credentials":{"type":"object","properties":{"accessKey":{"type":"string"},"secretKey":{"type":"string"},"roleArn":{"type":"string"},"externalId":{"type":"string"}},"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","region","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["azure"]},"keyId":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"credentials":{"type":"object","properties":{"tenantId":{"type":"string"},"clientId":{"type":"string"},"secret":{"type":"string"}},"required":["tenantId","clientId","secret"],"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["vault-transit"]},"address":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"mountPath":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"namespace":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"keyName":{"type":"string","pattern":"^(?!\\.+$)[A-Za-z0-9_.-]+$","maxLength":256},"credentials":{"type":"object","properties":{"token":{"type":"string","maxLength":4096}},"required":["token"],"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","address","keyName","credentials"],"additionalProperties":false}]}},"required":["name","envelope"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Encryption > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","encryption","configuration"]},"v1-encryption-configurations-post-team-scoped":{"operationId":"postEncryptionConfigurations","summary":"Create encryption configuration","description":"Creates an inactive configuration after validating KMS access. GCP cross-project creation defers that check and returns a generated service-account email: grant it KMS access before activation. Requires customer-managed keys to be enabled.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Created configuration without credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration or failed KMS check."},"409":{"description":"An encryption configuration with this name already exists."}},"tags":["Encryption Configurations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"enum":["gcp"]},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$"},"location":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":63},"keyRing":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"cryptoKey":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string"}},"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"credentials":{"type":"object","properties":{"accessKey":{"type":"string"},"secretKey":{"type":"string"},"roleArn":{"type":"string"},"externalId":{"type":"string"}},"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","region","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["azure"]},"keyId":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"credentials":{"type":"object","properties":{"tenantId":{"type":"string"},"clientId":{"type":"string"},"secret":{"type":"string"}},"required":["tenantId","clientId","secret"],"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["vault-transit"]},"address":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"mountPath":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"namespace":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"keyName":{"type":"string","pattern":"^(?!\\.+$)[A-Za-z0-9_.-]+$","maxLength":256},"credentials":{"type":"object","properties":{"token":{"type":"string","maxLength":4096}},"required":["token"],"additionalProperties":false},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1},"maxAgeMs":{"type":"integer","minimum":1},"cacheTtlSeconds":{"type":"integer","minimum":1}},"additionalProperties":false}},"required":["provider","address","keyName","credentials"],"additionalProperties":false}]}},"required":["name","envelope"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Encryption > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--get":{"operationId":"getEncryptionConfigurationsEncryptionconfigurationid","summary":"Get encryption configuration","description":"Gets safe settings and activation state for a customer-visible encryption configuration. Credentials and key-verification material are never returned.","parameters":[{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Encryption configuration details.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--get-team-scoped":{"operationId":"getEncryptionConfigurationsEncryptionconfigurationid","summary":"Get encryption configuration","description":"Gets safe settings and activation state for a customer-visible encryption configuration. Credentials and key-verification material are never returned.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Encryption configuration details.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--activate-post":{"operationId":"postEncryptionConfigurationsEncryptionconfigurationidActivate","summary":"Activate encryption configuration","description":"Revalidates KMS access and atomically selects this configuration for new encryption. Other configurations are retained for decryption. Repeated activation revalidates the selected configuration. Requires customer-managed keys to be enabled.","parameters":[{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Encryption configuration after activation.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["activate","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--activate-post-team-scoped":{"operationId":"postEncryptionConfigurationsEncryptionconfigurationidActivate","summary":"Activate encryption configuration","description":"Revalidates KMS access and atomically selects this configuration for new encryption. Other configurations are retained for decryption. Repeated activation revalidates the selected configuration. Requires customer-managed keys to be enabled.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Encryption configuration after activation.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["activate","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--deactivate-post":{"operationId":"postEncryptionConfigurationsEncryptionconfigurationidDeactivate","summary":"Deactivate encryption configuration","description":"Switches new encryption to Northflank-managed envelope encryption. Retains the old configuration for decryption and does not migrate existing data. Only the active configuration can be deactivated; repeated requests fail once it is inactive. Requires customer-managed keys to be enabled.","parameters":[{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Retained encryption configuration after deactivation.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["deactivate","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--deactivate-post-team-scoped":{"operationId":"postEncryptionConfigurationsEncryptionconfigurationidDeactivate","summary":"Deactivate encryption configuration","description":"Switches new encryption to Northflank-managed envelope encryption. Retains the old configuration for decryption and does not migrate existing data. Only the active configuration can be deactivated; repeated requests fail once it is inactive. Requires customer-managed keys to be enabled.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Retained encryption configuration after deactivation.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["deactivate","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--options-put":{"operationId":"putEncryptionConfigurationsEncryptionconfigurationidOptions","summary":"Update encryption configuration options","description":"Replaces all DEK rotation and cache overrides. Omitted values revert to platform defaults; send options={} to reset all overrides. Values must satisfy platform bounds. Requires customer-managed keys to be enabled.","parameters":[{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Updated configuration without credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Replaces all overrides. Omitted values use platform defaults; use {} to reset all overrides."}},"required":["options"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["update","encryption","configuration","options"]},"v1-encryption-configurations--encryptionConfigurationId--options-put-team-scoped":{"operationId":"putEncryptionConfigurationsEncryptionconfigurationidOptions","summary":"Update encryption configuration options","description":"Replaces all DEK rotation and cache overrides. Omitted values revert to platform defaults; send options={} to reset all overrides. Values must satisfy platform bounds. Requires customer-managed keys to be enabled.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Updated configuration without credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Replaces all overrides. Omitted values use platform defaults; use {} to reset all overrides."}},"required":["options"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["update","encryption","configuration","options"]},"v1-encryption-configurations--encryptionConfigurationId--settings-put":{"operationId":"putEncryptionConfigurationsEncryptionconfigurationidSettings","summary":"Update encryption configuration settings","description":"Replaces key coordinates and credentials after validating them. The provider cannot change. Previously activated configurations must still reach the same key; unused configurations may change keys. DEK options are preserved and must be updated through the options endpoint. Requires customer-managed keys to be enabled.","parameters":[{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Updated configuration without credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"enum":["gcp"]},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$"},"location":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":63},"keyRing":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"cryptoKey":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string"}},"additionalProperties":false}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"credentials":{"type":"object","properties":{"accessKey":{"type":"string"},"secretKey":{"type":"string"},"roleArn":{"type":"string"},"externalId":{"type":"string"}},"additionalProperties":false}},"required":["provider","region","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["azure"]},"keyId":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"credentials":{"type":"object","properties":{"tenantId":{"type":"string"},"clientId":{"type":"string"},"secret":{"type":"string"}},"required":["tenantId","clientId","secret"],"additionalProperties":false}},"required":["provider","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["vault-transit"]},"address":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"mountPath":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"namespace":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"keyName":{"type":"string","pattern":"^(?!\\.+$)[A-Za-z0-9_.-]+$","maxLength":256},"credentials":{"type":"object","properties":{"token":{"type":"string","maxLength":4096}},"required":["token"],"additionalProperties":false}},"required":["provider","address","keyName","credentials"],"additionalProperties":false}],"description":"Replacement provider settings and credentials. Update options separately."}},"required":["envelope"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["update","encryption","configuration","settings"]},"v1-encryption-configurations--encryptionConfigurationId--settings-put-team-scoped":{"operationId":"putEncryptionConfigurationsEncryptionconfigurationidSettings","summary":"Update encryption configuration settings","description":"Replaces key coordinates and credentials after validating them. The provider cannot change. Previously activated configurations must still reach the same key; unused configurations may change keys. DEK options are preserved and must be updated through the options endpoint. Requires customer-managed keys to be enabled.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Updated configuration without credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The name-derived ID of the encryption configuration.","example":"production-kms"},"name":{"type":"string"},"description":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"},"firstActivatedAt":{"type":"string","format":"date-time","description":"Time of first activation; absent for unused configurations."},"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"externalId":{"type":"string","description":"External ID used for cross-account role assumption."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","region","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["gcp"]},"projectId":{"type":"string"},"location":{"type":"string"},"keyRing":{"type":"string"},"cryptoKey":{"type":"string"},"serviceAccountEmail":{"type":"string","description":"Northflank-generated identity to grant access to the KMS key."},"keyfileServiceAccountEmail":{"type":"string","description":"Service-account email from the supplied key file."},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["azure"]},"keyId":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","keyId"],"additionalProperties":false},{"type":"object","properties":{"provider":{"type":"string","enum":["vault-transit"]},"address":{"type":"string"},"mountPath":{"type":"string"},"namespace":{"type":"string"},"keyName":{"type":"string"},"options":{"type":"object","properties":{"maxUses":{"type":"integer","minimum":1,"description":"Maximum encryption uses per data key."},"maxAgeMs":{"type":"integer","minimum":1,"description":"Maximum data-key lifetime in milliseconds."},"cacheTtlSeconds":{"type":"integer","minimum":1,"description":"Decrypted data-key cache TTL in seconds."}},"additionalProperties":false,"description":"Data-key rotation and cache overrides, subject to platform-configured bounds."}},"required":["provider","address","keyName"],"additionalProperties":false}]},"vault":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"],"additionalProperties":false,"description":"Legacy Vault configuration."}},"required":["id","name","createdAt","active"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Invalid configuration, failed KMS check, or unsupported state transition."},"404":{"description":"Encryption configuration not found in this team or organization."},"409":{"description":"Concurrent configuration change. Read the current state before retrying."}},"tags":["Encryption Configurations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"envelope":{"anyOf":[{"type":"object","properties":{"provider":{"enum":["gcp"]},"projectId":{"type":"string","pattern":"^[a-z][a-z0-9-]{4,28}[a-z0-9]$"},"location":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":63},"keyRing":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"cryptoKey":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","maxLength":63},"credentials":{"type":"object","properties":{"keyfileJson":{"type":"string"}},"additionalProperties":false}},"required":["provider","projectId","location","keyRing","cryptoKey"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["aws"]},"region":{"type":"string"},"keyId":{"type":"string"},"credentials":{"type":"object","properties":{"accessKey":{"type":"string"},"secretKey":{"type":"string"},"roleArn":{"type":"string"},"externalId":{"type":"string"}},"additionalProperties":false}},"required":["provider","region","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["azure"]},"keyId":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"credentials":{"type":"object","properties":{"tenantId":{"type":"string"},"clientId":{"type":"string"},"secret":{"type":"string"}},"required":["tenantId","clientId","secret"],"additionalProperties":false}},"required":["provider","keyId","credentials"],"additionalProperties":false},{"type":"object","properties":{"provider":{"enum":["vault-transit"]},"address":{"type":"string","pattern":"^[^?#@\\s\\\\%]+$","maxLength":2048},"mountPath":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"namespace":{"type":"string","pattern":"^[A-Za-z0-9_.-]+(\\/[A-Za-z0-9_.-]+)*$","maxLength":256},"keyName":{"type":"string","pattern":"^(?!\\.+$)[A-Za-z0-9_.-]+$","maxLength":256},"credentials":{"type":"object","properties":{"token":{"type":"string","maxLength":4096}},"required":["token"],"additionalProperties":false}},"required":["provider","address","keyName","credentials"],"additionalProperties":false}],"description":"Replacement provider settings and credentials. Update options separately."}},"required":["envelope"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["update","encryption","configuration","settings"]},"v1-encryption-configurations--encryptionConfigurationId--verify-post":{"operationId":"postEncryptionConfigurationsEncryptionconfigurationidVerify","summary":"Verify encryption configuration","description":"Checks stored KMS settings without changing the configuration. A completed check returns ok=false on KMS failure. Legacy Vault configurations return ok=true without a KMS check.","parameters":[{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Stored configuration verification result.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"},"keyRef":{"type":"string","description":"KMS key reference, when available."},"error":{"type":"string","description":"A safe validation failure summary."}},"required":["ok"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["verify","encryption","configuration"]},"v1-encryption-configurations--encryptionConfigurationId--verify-post-team-scoped":{"operationId":"postEncryptionConfigurationsEncryptionconfigurationidVerify","summary":"Verify encryption configuration","description":"Checks stored KMS settings without changing the configuration. A completed check returns ok=false on KMS failure. Legacy Vault configurations return ok=true without a KMS check.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path","schema":{"name":"encryptionConfigurationId","type":"string","required":true,"description":"Name-derived ID of the encryption configuration.","example":"production-kms","in":"path"}}],"responses":{"200":{"description":"Stored configuration verification result.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"},"keyRef":{"type":"string","description":"KMS key reference, when available."},"error":{"type":"string","description":"A safe validation failure summary."}},"required":["ok"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["verify","encryption","configuration"]},"v1-encryption-northflank-managed-activate-post":{"operationId":"postEncryptionNorthflankManagedActivate","summary":"Enable Northflank-managed envelope encryption","description":"Opts into Northflank-managed envelope encryption for new writes without supplying a customer KMS configuration. Repeated requests are a no-op once enabled. Existing data is unchanged; DEKs created after opt-in can later be migrated to a customer KMS. If a customer configuration is active, deactivate it to switch to Northflank-managed envelope encryption; no separate opt-in request is needed. Requires customer-managed keys to be enabled.","parameters":[],"responses":{"200":{"description":"Northflank-managed envelope encryption enabled.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"encryptionMode":{"type":"string","enum":["northflank-envelope"],"description":"Encryption used for new writes after opt-in."},"changed":{"type":"boolean","description":"False when Northflank-managed envelope encryption was already active."}},"required":["encryptionMode","changed"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Northflank-managed key validation failed."},"409":{"description":"A customer encryption configuration is active, or the configuration changed concurrently. Deactivating an active customer configuration switches to Northflank-managed envelope encryption without a separate opt-in request."}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["activate","encryption","northflank-managed"]},"v1-encryption-northflank-managed-activate-post-team-scoped":{"operationId":"postEncryptionNorthflankManagedActivate","summary":"Enable Northflank-managed envelope encryption","description":"Opts into Northflank-managed envelope encryption for new writes without supplying a customer KMS configuration. Repeated requests are a no-op once enabled. Existing data is unchanged; DEKs created after opt-in can later be migrated to a customer KMS. If a customer configuration is active, deactivate it to switch to Northflank-managed envelope encryption; no separate opt-in request is needed. Requires customer-managed keys to be enabled.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Northflank-managed envelope encryption enabled.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"encryptionMode":{"type":"string","enum":["northflank-envelope"],"description":"Encryption used for new writes after opt-in."},"changed":{"type":"boolean","description":"False when Northflank-managed envelope encryption was already active."}},"required":["encryptionMode","changed"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Northflank-managed key validation failed."},"409":{"description":"A customer encryption configuration is active, or the configuration changed concurrently. Deactivating an active customer configuration switches to Northflank-managed envelope encryption without a separate opt-in request."}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Manage","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["activate","encryption","northflank-managed"]},"v1-encryption-usage-get":{"operationId":"getEncryptionUsage","summary":"Get encryption configuration usage","description":"Returns wrapped-DEK counts for customer-visible configurations. Old keys must remain accessible while referenced. This does not count legacy non-envelope ciphertext.","parameters":[],"responses":{"200":{"description":"Wrapped-DEK counts by configuration ID.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"usage":{"type":"object","properties":{},"additionalProperties":false,"description":"Wrapped-DEK counts by configuration ID. Non-zero counts require retaining access to the old key; zero is not proof that legacy encrypted data is unused."}},"required":["usage"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","org"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","encryption","configurations","usage"]},"v1-encryption-usage-get-team-scoped":{"operationId":"getEncryptionUsage","summary":"Get encryption configuration usage","description":"Returns wrapped-DEK counts for customer-visible configurations. Old keys must remain accessible while referenced. This does not count legacy non-envelope ciphertext.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Wrapped-DEK counts by configuration ID.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"usage":{"type":"object","properties":{},"additionalProperties":false,"description":"Wrapped-DEK counts by configuration ID. Non-zero counts require retaining access to the old key; zero is not proof that legacy encrypted data is unused."}},"required":["usage"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Encryption Configurations","team"],"security":[],"x-nf-permission-required":"Account > Admin > Encryption > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","encryption","configurations","usage"]},"v1-gradual-rollout-strategies-get":{"operationId":"getGradualRolloutStrategies","summary":"List gradual rollout strategies","description":"Lists the gradual rollout strategies belonging to the team, newest first.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of gradual rollout strategies.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"strategies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false},"description":"An array of gradual rollout strategies, newest first."}},"required":["strategies"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies"],"security":[],"x-nf-permission-required":"Account > Platform > GradualRollouts > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","gradual-rollout-strategies"]},"v1-gradual-rollout-strategies-get-team-scoped":{"operationId":"getGradualRolloutStrategies","summary":"List gradual rollout strategies","description":"Lists the gradual rollout strategies belonging to the team, newest first.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of gradual rollout strategies.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"strategies":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false},"description":"An array of gradual rollout strategies, newest first."}},"required":["strategies"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","team"],"security":[],"x-nf-permission-required":"Account > Platform > GradualRollouts > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","gradual-rollout-strategies"]},"v1-gradual-rollout-strategies-post":{"operationId":"postGradualRolloutStrategies","summary":"Create gradual rollout strategy","description":"Creates a new gradual rollout strategy.","parameters":[],"responses":{"200":{"description":"Details about the created gradual rollout strategy.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the gradual rollout strategy","example":"my-canary-rollout"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a template","example":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a release flow","example":true},"releaseFromCD":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a CD pipeline","example":true},"releaseFromUI":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from the UI","example":true},"releaseFromApi":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated via the API","example":true}},"additionalProperties":false,"description":"Conditions under which a new release will automatically initiate as a gradual rollout"},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"When enabled, new deployments are blocked while a rollout is in progress","example":true}},"additionalProperties":false},"details":{"oneOf":[{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"Strategy used to split traffic between stable and canary deployments","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the canary deployment"},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the stable deployment"}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true}],"description":"Configuration for the selected canary strategy"}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Strategy-specific configuration details","x-required":true}],"description":"Strategy-specific configuration details"}},"required":["type","details"],"additionalProperties":false,"description":"Gradual rollout strategy specification"}}},"required":true},"x-nf-permission-required":"Account > Platform > GradualRollouts > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies-post-team-scoped":{"operationId":"postGradualRolloutStrategies","summary":"Create gradual rollout strategy","description":"Creates a new gradual rollout strategy.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created gradual rollout strategy.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the gradual rollout strategy","example":"my-canary-rollout"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a template","example":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a release flow","example":true},"releaseFromCD":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a CD pipeline","example":true},"releaseFromUI":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from the UI","example":true},"releaseFromApi":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated via the API","example":true}},"additionalProperties":false,"description":"Conditions under which a new release will automatically initiate as a gradual rollout"},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"When enabled, new deployments are blocked while a rollout is in progress","example":true}},"additionalProperties":false},"details":{"oneOf":[{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"Strategy used to split traffic between stable and canary deployments","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the canary deployment"},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the stable deployment"}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true}],"description":"Configuration for the selected canary strategy"}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Strategy-specific configuration details","x-required":true}],"description":"Strategy-specific configuration details"}},"required":["type","details"],"additionalProperties":false,"description":"Gradual rollout strategy specification"}}},"required":true},"x-nf-permission-required":"Account > Platform > GradualRollouts > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies-put":{"operationId":"putGradualRolloutStrategies","summary":"Create or update gradual rollout strategy","description":"Creates or updates a gradual rollout strategy.","parameters":[],"responses":{"200":{"description":"Details about the created or updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the gradual rollout strategy","example":"my-canary-rollout"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a template","example":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a release flow","example":true},"releaseFromCD":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a CD pipeline","example":true},"releaseFromUI":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from the UI","example":true},"releaseFromApi":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated via the API","example":true}},"additionalProperties":false,"description":"Conditions under which a new release will automatically initiate as a gradual rollout"},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"When enabled, new deployments are blocked while a rollout is in progress","example":true}},"additionalProperties":false},"details":{"oneOf":[{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"Strategy used to split traffic between stable and canary deployments","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the canary deployment"},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the stable deployment"}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true}],"description":"Configuration for the selected canary strategy"}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Strategy-specific configuration details","x-required":true}],"description":"Strategy-specific configuration details"}},"required":["type","details"],"additionalProperties":false,"description":"Gradual rollout strategy specification"}}},"required":true},"x-nf-permission-required":"Account > Platform > GradualRollouts > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies-put-team-scoped":{"operationId":"putGradualRolloutStrategies","summary":"Create or update gradual rollout strategy","description":"Creates or updates a gradual rollout strategy.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created or updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the gradual rollout strategy","example":"my-canary-rollout"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a template","example":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a release flow","example":true},"releaseFromCD":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a CD pipeline","example":true},"releaseFromUI":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from the UI","example":true},"releaseFromApi":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated via the API","example":true}},"additionalProperties":false,"description":"Conditions under which a new release will automatically initiate as a gradual rollout"},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"When enabled, new deployments are blocked while a rollout is in progress","example":true}},"additionalProperties":false},"details":{"oneOf":[{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"Strategy used to split traffic between stable and canary deployments","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the canary deployment"},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the stable deployment"}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true}],"description":"Configuration for the selected canary strategy"}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Strategy-specific configuration details","x-required":true}],"description":"Strategy-specific configuration details"}},"required":["type","details"],"additionalProperties":false,"description":"Gradual rollout strategy specification"}}},"required":true},"x-nf-permission-required":"Account > Platform > GradualRollouts > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies--gradualRolloutStrategyId--get":{"operationId":"getGradualRolloutStrategiesGradualrolloutstrategyid","summary":"Get gradual rollout strategy","description":"Gets details of the given gradual rollout strategy.","parameters":[{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path","schema":{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path"}}],"responses":{"200":{"description":"Details about the gradual rollout strategy.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies"],"security":[],"x-nf-permission-required":"Account > Platform > GradualRollouts > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies--gradualRolloutStrategyId--get-team-scoped":{"operationId":"getGradualRolloutStrategiesGradualrolloutstrategyid","summary":"Get gradual rollout strategy","description":"Gets details of the given gradual rollout strategy.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path","schema":{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path"}}],"responses":{"200":{"description":"Details about the gradual rollout strategy.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","team"],"security":[],"x-nf-permission-required":"Account > Platform > GradualRollouts > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies--gradualRolloutStrategyId--patch":{"operationId":"patchGradualRolloutStrategiesGradualrolloutstrategyid","summary":"Update gradual rollout strategy","description":"Updates a gradual rollout strategy.","parameters":[{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path","schema":{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path"}}],"responses":{"200":{"description":"Details about the updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the gradual rollout strategy","example":"my-canary-rollout"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a template","example":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a release flow","example":true},"releaseFromCD":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a CD pipeline","example":true},"releaseFromUI":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from the UI","example":true},"releaseFromApi":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated via the API","example":true}},"additionalProperties":false,"description":"Conditions under which a new release will automatically initiate as a gradual rollout"},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"When enabled, new deployments are blocked while a rollout is in progress","example":true}},"additionalProperties":false},"details":{"oneOf":[{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"Strategy used to split traffic between stable and canary deployments","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the canary deployment"},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the stable deployment"}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true}],"description":"Configuration for the selected canary strategy"}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Strategy-specific configuration details","x-required":true}],"description":"Strategy-specific configuration details"}},"required":["details"],"additionalProperties":false,"description":"Gradual rollout strategy specification"}}},"required":true},"x-nf-permission-required":"Account > Platform > GradualRollouts > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies--gradualRolloutStrategyId--patch-team-scoped":{"operationId":"patchGradualRolloutStrategiesGradualrolloutstrategyid","summary":"Update gradual rollout strategy","description":"Updates a gradual rollout strategy.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path","schema":{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path"}}],"responses":{"200":{"description":"Details about the updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the gradual rollout strategy","example":"example-identifier"},"name":{"type":"string","description":"Name of the gradual rollout strategy","example":"example-name"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true}},"additionalProperties":false},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"]},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100},"stablePercentage":{"type":"integer","minimum":0,"maximum":100}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false},"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1},"headerValue":{"type":"string","minLength":1}},"required":["headerName","headerValue"],"additionalProperties":false}},"additionalProperties":false,"x-required":true}]}},"required":["canaryStrategy"],"additionalProperties":false}},"required":["id","name","type","details"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name for the gradual rollout strategy","example":"my-canary-rollout"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy","example":"canary"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a template","example":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a release flow","example":true},"releaseFromCD":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from a CD pipeline","example":true},"releaseFromUI":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated from the UI","example":true},"releaseFromApi":{"type":"boolean","nullable":true,"description":"Automatically trigger the rollout strategy when a release is initiated via the API","example":true}},"additionalProperties":false,"description":"Conditions under which a new release will automatically initiate as a gradual rollout"},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"When enabled, new deployments are blocked while a rollout is in progress","example":true}},"additionalProperties":false},"details":{"oneOf":[{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"Strategy used to split traffic between stable and canary deployments","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the canary deployment"},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"description":"HTTP header name used to identify requests that should be routed to the target deployment","example":"x-canary"},"headerValue":{"type":"string","minLength":1,"description":"HTTP header value that routes matching requests to the target deployment","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header configuration that will route traffic to the stable deployment"}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"description":"Configuration for the selected canary strategy","x-required":true}],"description":"Configuration for the selected canary strategy"}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Strategy-specific configuration details","x-required":true}],"description":"Strategy-specific configuration details"}},"required":["details"],"additionalProperties":false,"description":"Gradual rollout strategy specification"}}},"required":true},"x-nf-permission-required":"Account > Platform > GradualRollouts > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies--gradualRolloutStrategyId--delete":{"operationId":"deleteGradualRolloutStrategiesGradualrolloutstrategyid","summary":"Delete gradual rollout strategy","description":"Deletes a gradual rollout strategy. Any services still using it are detached first, which redeploys them without the rollout. Because that redeploys services, this also requires service update permission. Fails if a rollout is in progress on any of those services.","parameters":[{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path","schema":{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"403":{"description":"The caller does not have permission to update services."},"409":{"description":"A rollout is in progress on one or more services using this strategy."}},"tags":["Rollout Strategies"],"security":[],"x-nf-permission-required":"Account > Platform > GradualRollouts > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","gradual-rollout-strategy"]},"v1-gradual-rollout-strategies--gradualRolloutStrategyId--delete-team-scoped":{"operationId":"deleteGradualRolloutStrategiesGradualrolloutstrategyid","summary":"Delete gradual rollout strategy","description":"Deletes a gradual rollout strategy. Any services still using it are detached first, which redeploys them without the rollout. Because that redeploys services, this also requires service update permission. Fails if a rollout is in progress on any of those services.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path","schema":{"name":"gradualRolloutStrategyId","type":"string","required":true,"description":"ID of the gradual rollout strategy","example":"example-gradual-rollout-strategy","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"403":{"description":"The caller does not have permission to update services."},"409":{"description":"A rollout is in progress on one or more services using this strategy."}},"tags":["Rollout Strategies","team"],"security":[],"x-nf-permission-required":"Account > Platform > GradualRollouts > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","gradual-rollout-strategy"]},"v1-integrations-log-sinks-get":{"operationId":"getIntegrationsLogSinks","summary":"List log sinks","description":"Gets a list of log sinks added to this account.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of log sinks.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"logSinks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"id":{"type":"string","description":"Identifier for the Log Sink","example":"example-project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"status":{"type":"string","enum":["paused","running","failing","creating"],"description":"Current status of the log sink"},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of the log sink.","examples":["http","loki"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was created.","example":"2022-06-14 15:10:42.842Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was last updated.","example":"2022-06-14 15:10:42.842Z"}},"required":["name","id","restricted","projects","status","sinkType","createdAt","updatedAt"],"additionalProperties":false,"description":"A log sink object."},"description":"An array of log sinks added to this account."}},"required":["logSinks"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","log-sinks"]},"v1-integrations-log-sinks-get-team-scoped":{"operationId":"getIntegrationsLogSinks","summary":"List log sinks","description":"Gets a list of log sinks added to this account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of log sinks.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"logSinks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"id":{"type":"string","description":"Identifier for the Log Sink","example":"example-project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"status":{"type":"string","enum":["paused","running","failing","creating"],"description":"Current status of the log sink"},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of the log sink.","examples":["http","loki"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was created.","example":"2022-06-14 15:10:42.842Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was last updated.","example":"2022-06-14 15:10:42.842Z"}},"required":["name","id","restricted","projects","status","sinkType","createdAt","updatedAt"],"additionalProperties":false,"description":"A log sink object."},"description":"An array of log sinks added to this account."}},"required":["logSinks"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","log-sinks"]},"v1-integrations-log-sinks-post":{"operationId":"postIntegrationsLogSinks","summary":"Create log sink","description":"Creates a new log sink.","parameters":[],"responses":{"200":{"description":"Details about a log sink.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the new log sink.","example":"example-log-sink"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["loki"],"description":"The type of the log sink.","example":"loki"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"The endpoint of the Loki log sink.","example":"https://logs.example.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"auth":{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"The authentication strategy.","example":"basic"},"user":{"type":"string","description":"The username for the log sink.","example":"admin"},"password":{"type":"string","description":"The password for the log sink.","example":"password1234"}},"additionalProperties":false,"description":"Object containing authentication data for the log sink."}},"required":["endpoint"],"additionalProperties":false,"description":"Details about the Loki log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Loki"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["datadog_logs"],"description":"The type of the log sink.","example":"datadog_logs"},"sinkData":{"type":"object","properties":{"default_api_key":{"type":"string","description":"The Datadog API key.","example":"abcdef12345678900000000000000000"},"region":{"type":"string","enum":["eu","us","us3","us5"],"description":"The Datadog region.","example":"eu"}},"required":["default_api_key","region"],"additionalProperties":false,"description":"Details about the Datadog log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Datadog"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["papertrail"],"description":"The type of the log sink.","example":"papertrail"},"sinkData":{"oneOf":[{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["port"],"description":"The authentication strategy.","example":"port"},"host":{"type":"string","description":"The host for the Papertrail log destination.","example":"logs1.papertrailapp.com:"},"port":{"type":"number","format":"float","description":"The port for the Papertrail log destination.","example":8000}},"required":["authenticationStrategy","host","port"],"additionalProperties":false,"description":"Authenticate with a host/port"},{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["token"],"description":"The authentication strategy.","example":"token"},"uri":{"type":"string","description":"The uri for the Papertrail log destination.","example":"https://logs.collector.solarwinds.com/v1/log"},"token":{"type":"string","description":"The HTTP Token for the Papertrail log destination.","example":"123abcdefghijklmnopqrstuvwxy"}},"required":["authenticationStrategy","uri","token"],"additionalProperties":false,"description":"Authenticate with a token."}],"description":"Papertrail Sink Schema."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Papertrail"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["aws_s3"],"description":"The type of the log sink.","example":"aws_s3"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"Endpoint for the AWS S3 or compatible API bucket.","example":"my.bucket.com"},"region":{"type":"string","enum":["eu-west-1","eu-west-2","eu-west-3","eu-central-1","eu-south-1","eu-north-1","us-west-1","us-west-2","us-east-1","us-east2"],"description":"Region of the S3 bucket.","example":"eu-west-2"},"auth":{"type":"object","properties":{"accessKeyId":{"type":"string","description":"Access key id for the bucket.","example":"PMSACIHNUIASDBWQDS"},"secretAccessKey":{"type":"string","description":"Secret access key for the bucket.","example":"HA1PLMNOEAEYUHAJQMSDUJQS"}},"required":["accessKeyId","secretAccessKey"],"additionalProperties":false,"description":"Authentication object."},"bucket":{"type":"string","description":"Name of the S3 Bucket.","example":"northflank-logs"},"compression":{"type":"string","enum":["gzip","none"],"description":"Log file compression method.","example":"gzip"}},"required":["endpoint","region","bucket","compression"],"additionalProperties":false,"description":"Details about the AWS S3 log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using AWS S3"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["http"],"description":"The type of the log sink.","example":"http"},"sinkData":{"type":"object","properties":{"uri":{"type":"string","description":"Uri to send logs to.","example":"my.log-collector.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"batch":{"type":"object","properties":{"maxEvents":{"type":"number","format":"float","description":"The max number of events in a batch before sending","example":"10","default":"20"},"maxBytes":{"type":"number","format":"float","description":"The max size of a batch in bytes before sending","example":"1e+7"}},"additionalProperties":false},"auth":{"oneOf":[{"type":"object","properties":{"strategy":{"type":"string","enum":["none"],"description":"No authentication strategy","example":"none"}},"required":["strategy"],"additionalProperties":false,"description":"No authentication strategy"},{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"Basic HTTP authentication strategy.","example":"basic"},"user":{"type":"string","description":"Username for basic http authentication.","example":"my-user"},"password":{"type":"string","description":"Password for basic http authentication.","example":"secret-password"}},"required":["strategy","password"],"additionalProperties":false,"description":"Authenticate with a basic http strategy."},{"type":"object","properties":{"strategy":{"type":"string","enum":["bearer"],"description":"Bearer token authentication strategy.","example":"bearer"},"token":{"type":"string","description":"Token for bearer token authentication.","example":"my-token"}},"required":["strategy"],"additionalProperties":false,"description":"Authenticate with a bearer token strategy."}],"description":"Auth information."},"framing":{"type":"object","properties":{"method":{"type":"string","enum":["none","newline","length"],"default":"none"}},"additionalProperties":false}},"required":["uri","encoding","auth"],"additionalProperties":false,"description":"Details about the HTTP log sink.","default":{"method":"none"}}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using HTTP"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["logdna"],"description":"The type of the log sink.","example":"logdna"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Ingestion Key","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"}},"required":["api_key"],"additionalProperties":false,"description":"Details about the LogDNA log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using LogDNA"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["betterStack"],"description":"The type of the log sink.","example":"betterStack"},"sinkData":{"type":"object","properties":{"token":{"type":"string","description":"Better Stack Source Token","example":"vhnqrLygVQ5GnSQUTZamKvAq"},"uri":{"type":"string","description":"Better stack ingestion host","example":"abc123.eu-nbg-2.betterstackdata.com"}},"required":["token","uri"],"additionalProperties":false,"description":"Details about the Better Stack log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Better Stack"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["honeycomb"],"description":"The type of the log sink.","example":"honeycomb"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Honeycomb API Key","example":"b1dd3feb585asd1a3e9"},"dataset":{"type":"string","description":"Name of the dataset","example":"staging-logs"}},"required":["api_key","dataset"],"additionalProperties":false,"description":"Details about the Honeycomb log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Honeycomb"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["logzio"],"description":"The type of the log sink.","example":"logzio"},"sinkData":{"type":"object","properties":{"region":{"type":"string","enum":["eu","uk","us","ca","au","nl","wa"],"description":"Your Logzio region code","example":"eu"},"token":{"type":"string","description":"The Log Shipping Token of the account you want to ship to","example":"sNFijNFgNFoNFrMsNFbNFObNFcgNFqoa"}},"required":["region","token"],"additionalProperties":false,"description":"Details about the Logz.io log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Logz.io"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["solarWinds"],"description":"The type of the log sink.","example":"solarWinds"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Solar Winds API Key","example":"Tr8BIEmYx1fuM3_XRMwU3xXEFnD20p9NFkRIu1COrDqMCM4g86qWZgVdgs1Y7mzWtFMI0Zc"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false},"endpointType":{"type":"string","enum":["unitary","bulk"],"description":"Solar Winds endpoint type"}},"required":["api_key","endpointType"],"additionalProperties":false,"description":"Details about the Solar Winds log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Solar Winds"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["axiom"],"description":"The type of the log sink.","example":"axiom"},"sinkData":{"type":"object","properties":{"dataset":{"type":"string","description":"Name of the data","example":"staging"},"token":{"type":"string","description":"Axiom API/Personal token","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"},"tokenType":{"type":"string","enum":["personal","api"],"description":"Using a personal token","example":"api"},"orgId":{"type":"string","description":"The ID of the organisation, required if using a personal token"},"url":{"type":"string","description":"The Axiom url to use. Only change if self hosting axiom.","default":"https://api.axiom.co"}},"required":["dataset","token","tokenType"],"additionalProperties":false,"description":"Details about the Axiom log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Axiom"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["newRelic"],"description":"The type of the log sink.","example":"newRelic"},"sinkData":{"type":"object","properties":{"accountId":{"type":"string","description":"New Relic Account ID","example":"b1dd3feb585asd1a3e9"},"licenseKey":{"type":"string","description":"New Relic License Key","example":"b1dd3feb585asd1a3e9"},"region":{"type":"string","enum":["eu","us"],"example":"eu"}},"required":["accountId","licenseKey","region"],"additionalProperties":false,"description":"Details about the New Relic log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using New Relic"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["sentry"],"description":"The type of the log sink.","example":"sentry"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","pattern":"^https:\\/\\/[\\w.-]+\\.sentry\\.io\\/","description":"The complete OTLP logs endpoint from your Sentry Client Keys configuration.","example":"https://o459080.ingest.de.sentry.io/api/5523749/integration/otlp/v1/logs"},"publicKey":{"type":"string","description":"The public key from your Sentry OTLP DSN (Client Keys (DSN) > OpenTelemetry).","example":"5cac0d8cb9414d5c80eb8467f55d5352"}},"required":["endpoint","publicKey"],"additionalProperties":false,"description":"Details about the Sentry log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Sentry"}],"description":"Create a log sink"}}},"required":true},"x-nf-permission-required":"Account > Observability > LogSinks > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","log-sink"]},"v1-integrations-log-sinks-post-team-scoped":{"operationId":"postIntegrationsLogSinks","summary":"Create log sink","description":"Creates a new log sink.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about a log sink.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the new log sink.","example":"example-log-sink"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["loki"],"description":"The type of the log sink.","example":"loki"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"The endpoint of the Loki log sink.","example":"https://logs.example.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"auth":{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"The authentication strategy.","example":"basic"},"user":{"type":"string","description":"The username for the log sink.","example":"admin"},"password":{"type":"string","description":"The password for the log sink.","example":"password1234"}},"additionalProperties":false,"description":"Object containing authentication data for the log sink."}},"required":["endpoint"],"additionalProperties":false,"description":"Details about the Loki log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Loki"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["datadog_logs"],"description":"The type of the log sink.","example":"datadog_logs"},"sinkData":{"type":"object","properties":{"default_api_key":{"type":"string","description":"The Datadog API key.","example":"abcdef12345678900000000000000000"},"region":{"type":"string","enum":["eu","us","us3","us5"],"description":"The Datadog region.","example":"eu"}},"required":["default_api_key","region"],"additionalProperties":false,"description":"Details about the Datadog log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Datadog"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["papertrail"],"description":"The type of the log sink.","example":"papertrail"},"sinkData":{"oneOf":[{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["port"],"description":"The authentication strategy.","example":"port"},"host":{"type":"string","description":"The host for the Papertrail log destination.","example":"logs1.papertrailapp.com:"},"port":{"type":"number","format":"float","description":"The port for the Papertrail log destination.","example":8000}},"required":["authenticationStrategy","host","port"],"additionalProperties":false,"description":"Authenticate with a host/port"},{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["token"],"description":"The authentication strategy.","example":"token"},"uri":{"type":"string","description":"The uri for the Papertrail log destination.","example":"https://logs.collector.solarwinds.com/v1/log"},"token":{"type":"string","description":"The HTTP Token for the Papertrail log destination.","example":"123abcdefghijklmnopqrstuvwxy"}},"required":["authenticationStrategy","uri","token"],"additionalProperties":false,"description":"Authenticate with a token."}],"description":"Papertrail Sink Schema."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Papertrail"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["aws_s3"],"description":"The type of the log sink.","example":"aws_s3"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"Endpoint for the AWS S3 or compatible API bucket.","example":"my.bucket.com"},"region":{"type":"string","enum":["eu-west-1","eu-west-2","eu-west-3","eu-central-1","eu-south-1","eu-north-1","us-west-1","us-west-2","us-east-1","us-east2"],"description":"Region of the S3 bucket.","example":"eu-west-2"},"auth":{"type":"object","properties":{"accessKeyId":{"type":"string","description":"Access key id for the bucket.","example":"PMSACIHNUIASDBWQDS"},"secretAccessKey":{"type":"string","description":"Secret access key for the bucket.","example":"HA1PLMNOEAEYUHAJQMSDUJQS"}},"required":["accessKeyId","secretAccessKey"],"additionalProperties":false,"description":"Authentication object."},"bucket":{"type":"string","description":"Name of the S3 Bucket.","example":"northflank-logs"},"compression":{"type":"string","enum":["gzip","none"],"description":"Log file compression method.","example":"gzip"}},"required":["endpoint","region","bucket","compression"],"additionalProperties":false,"description":"Details about the AWS S3 log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using AWS S3"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["http"],"description":"The type of the log sink.","example":"http"},"sinkData":{"type":"object","properties":{"uri":{"type":"string","description":"Uri to send logs to.","example":"my.log-collector.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"batch":{"type":"object","properties":{"maxEvents":{"type":"number","format":"float","description":"The max number of events in a batch before sending","example":"10","default":"20"},"maxBytes":{"type":"number","format":"float","description":"The max size of a batch in bytes before sending","example":"1e+7"}},"additionalProperties":false},"auth":{"oneOf":[{"type":"object","properties":{"strategy":{"type":"string","enum":["none"],"description":"No authentication strategy","example":"none"}},"required":["strategy"],"additionalProperties":false,"description":"No authentication strategy"},{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"Basic HTTP authentication strategy.","example":"basic"},"user":{"type":"string","description":"Username for basic http authentication.","example":"my-user"},"password":{"type":"string","description":"Password for basic http authentication.","example":"secret-password"}},"required":["strategy","password"],"additionalProperties":false,"description":"Authenticate with a basic http strategy."},{"type":"object","properties":{"strategy":{"type":"string","enum":["bearer"],"description":"Bearer token authentication strategy.","example":"bearer"},"token":{"type":"string","description":"Token for bearer token authentication.","example":"my-token"}},"required":["strategy"],"additionalProperties":false,"description":"Authenticate with a bearer token strategy."}],"description":"Auth information."},"framing":{"type":"object","properties":{"method":{"type":"string","enum":["none","newline","length"],"default":"none"}},"additionalProperties":false}},"required":["uri","encoding","auth"],"additionalProperties":false,"description":"Details about the HTTP log sink.","default":{"method":"none"}}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using HTTP"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["logdna"],"description":"The type of the log sink.","example":"logdna"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Ingestion Key","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"}},"required":["api_key"],"additionalProperties":false,"description":"Details about the LogDNA log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using LogDNA"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["betterStack"],"description":"The type of the log sink.","example":"betterStack"},"sinkData":{"type":"object","properties":{"token":{"type":"string","description":"Better Stack Source Token","example":"vhnqrLygVQ5GnSQUTZamKvAq"},"uri":{"type":"string","description":"Better stack ingestion host","example":"abc123.eu-nbg-2.betterstackdata.com"}},"required":["token","uri"],"additionalProperties":false,"description":"Details about the Better Stack log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Better Stack"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["honeycomb"],"description":"The type of the log sink.","example":"honeycomb"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Honeycomb API Key","example":"b1dd3feb585asd1a3e9"},"dataset":{"type":"string","description":"Name of the dataset","example":"staging-logs"}},"required":["api_key","dataset"],"additionalProperties":false,"description":"Details about the Honeycomb log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Honeycomb"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["logzio"],"description":"The type of the log sink.","example":"logzio"},"sinkData":{"type":"object","properties":{"region":{"type":"string","enum":["eu","uk","us","ca","au","nl","wa"],"description":"Your Logzio region code","example":"eu"},"token":{"type":"string","description":"The Log Shipping Token of the account you want to ship to","example":"sNFijNFgNFoNFrMsNFbNFObNFcgNFqoa"}},"required":["region","token"],"additionalProperties":false,"description":"Details about the Logz.io log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Logz.io"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["solarWinds"],"description":"The type of the log sink.","example":"solarWinds"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Solar Winds API Key","example":"Tr8BIEmYx1fuM3_XRMwU3xXEFnD20p9NFkRIu1COrDqMCM4g86qWZgVdgs1Y7mzWtFMI0Zc"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false},"endpointType":{"type":"string","enum":["unitary","bulk"],"description":"Solar Winds endpoint type"}},"required":["api_key","endpointType"],"additionalProperties":false,"description":"Details about the Solar Winds log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Solar Winds"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["axiom"],"description":"The type of the log sink.","example":"axiom"},"sinkData":{"type":"object","properties":{"dataset":{"type":"string","description":"Name of the data","example":"staging"},"token":{"type":"string","description":"Axiom API/Personal token","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"},"tokenType":{"type":"string","enum":["personal","api"],"description":"Using a personal token","example":"api"},"orgId":{"type":"string","description":"The ID of the organisation, required if using a personal token"},"url":{"type":"string","description":"The Axiom url to use. Only change if self hosting axiom.","default":"https://api.axiom.co"}},"required":["dataset","token","tokenType"],"additionalProperties":false,"description":"Details about the Axiom log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Axiom"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["newRelic"],"description":"The type of the log sink.","example":"newRelic"},"sinkData":{"type":"object","properties":{"accountId":{"type":"string","description":"New Relic Account ID","example":"b1dd3feb585asd1a3e9"},"licenseKey":{"type":"string","description":"New Relic License Key","example":"b1dd3feb585asd1a3e9"},"region":{"type":"string","enum":["eu","us"],"example":"eu"}},"required":["accountId","licenseKey","region"],"additionalProperties":false,"description":"Details about the New Relic log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using New Relic"},{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true,"default":false},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink.","default":[]},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["sentry"],"description":"The type of the log sink.","example":"sentry"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","pattern":"^https:\\/\\/[\\w.-]+\\.sentry\\.io\\/","description":"The complete OTLP logs endpoint from your Sentry Client Keys configuration.","example":"https://o459080.ingest.de.sentry.io/api/5523749/integration/otlp/v1/logs"},"publicKey":{"type":"string","description":"The public key from your Sentry OTLP DSN (Client Keys (DSN) > OpenTelemetry).","example":"5cac0d8cb9414d5c80eb8467f55d5352"}},"required":["endpoint","publicKey"],"additionalProperties":false,"description":"Details about the Sentry log sink."}},"required":["name","sinkType","sinkData"],"additionalProperties":false,"description":"Create a log sink using Sentry"}],"description":"Create a log sink"}}},"required":true},"x-nf-permission-required":"Account > Observability > LogSinks > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","log-sink"]},"v1-integrations-log-sinks--logSinkId--get":{"operationId":"getIntegrationsLogSinksLogsinkid","summary":"Get log sink details","description":"Gets details about a given log sink.","parameters":[{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"Details about a log sink.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"id":{"type":"string","description":"Identifier for the Log Sink","example":"example-project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"status":{"type":"string","enum":["paused","running","failing","creating"],"description":"Current status of the log sink"},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of the log sink.","examples":["http","loki"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was created.","example":"2022-06-14 15:10:42.842Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was last updated.","example":"2022-06-14 15:10:42.842Z"},"sinkData":{"oneOf":[{"type":"object","properties":{"endpoint":{"type":"string","description":"The endpoint of the Loki log sink.","example":"https://logs.example.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"auth":{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"The authentication strategy.","example":"basic"},"user":{"type":"string","description":"The username for the log sink.","example":"admin"},"password":{"type":"string","description":"The password for the log sink.","example":"password1234"}},"additionalProperties":false,"description":"Object containing authentication data for the log sink."}},"required":["endpoint"],"additionalProperties":false,"description":"Details about the Loki log sink.","x-required":true},{"type":"object","properties":{"default_api_key":{"type":"string","description":"The Datadog API key.","example":"abcdef12345678900000000000000000"},"region":{"type":"string","enum":["eu","us","us3","us5"],"description":"The Datadog region.","example":"eu"}},"required":["default_api_key","region"],"additionalProperties":false,"description":"Details about the Datadog log sink.","x-required":true},{"oneOf":[{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["port"],"description":"The authentication strategy.","example":"port"},"host":{"type":"string","description":"The host for the Papertrail log destination.","example":"logs1.papertrailapp.com:"},"port":{"type":"number","format":"float","description":"The port for the Papertrail log destination.","example":8000}},"required":["authenticationStrategy","host","port"],"additionalProperties":false,"description":"Authenticate with a host/port"},{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["token"],"description":"The authentication strategy.","example":"token"},"uri":{"type":"string","description":"The uri for the Papertrail log destination.","example":"https://logs.collector.solarwinds.com/v1/log"},"token":{"type":"string","description":"The HTTP Token for the Papertrail log destination.","example":"123abcdefghijklmnopqrstuvwxy"}},"required":["authenticationStrategy","uri","token"],"additionalProperties":false,"description":"Authenticate with a token."}],"description":"Papertrail Sink Schema.","x-required":true},{"type":"object","properties":{"endpoint":{"type":"string","description":"Endpoint for the AWS S3 or compatible API bucket.","example":"my.bucket.com"},"region":{"type":"string","enum":["eu-west-1","eu-west-2","eu-west-3","eu-central-1","eu-south-1","eu-north-1","us-west-1","us-west-2","us-east-1","us-east2"],"description":"Region of the S3 bucket.","example":"eu-west-2"},"auth":{"type":"object","properties":{"accessKeyId":{"type":"string","description":"Access key id for the bucket.","example":"PMSACIHNUIASDBWQDS"},"secretAccessKey":{"type":"string","description":"Secret access key for the bucket.","example":"HA1PLMNOEAEYUHAJQMSDUJQS"}},"required":["accessKeyId","secretAccessKey"],"additionalProperties":false,"description":"Authentication object."},"bucket":{"type":"string","description":"Name of the S3 Bucket.","example":"northflank-logs"},"compression":{"type":"string","enum":["gzip","none"],"description":"Log file compression method.","example":"gzip"}},"required":["endpoint","region","bucket","compression"],"additionalProperties":false,"description":"Details about the AWS S3 log sink.","x-required":true},{"type":"object","properties":{"uri":{"type":"string","description":"Uri to send logs to.","example":"my.log-collector.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"batch":{"type":"object","properties":{"maxEvents":{"type":"number","format":"float","description":"The max number of events in a batch before sending","example":"10","default":"20"},"maxBytes":{"type":"number","format":"float","description":"The max size of a batch in bytes before sending","example":"1e+7"}},"additionalProperties":false},"auth":{"oneOf":[{"type":"object","properties":{"strategy":{"type":"string","enum":["none"],"description":"No authentication strategy","example":"none"}},"required":["strategy"],"additionalProperties":false,"description":"No authentication strategy"},{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"Basic HTTP authentication strategy.","example":"basic"},"user":{"type":"string","description":"Username for basic http authentication.","example":"my-user"},"password":{"type":"string","description":"Password for basic http authentication.","example":"secret-password"}},"required":["strategy","password"],"additionalProperties":false,"description":"Authenticate with a basic http strategy."},{"type":"object","properties":{"strategy":{"type":"string","enum":["bearer"],"description":"Bearer token authentication strategy.","example":"bearer"},"token":{"type":"string","description":"Token for bearer token authentication.","example":"my-token"}},"required":["strategy"],"additionalProperties":false,"description":"Authenticate with a bearer token strategy."}],"description":"Auth information."},"framing":{"type":"object","properties":{"method":{"type":"string","enum":["none","newline","length"],"default":"none"}},"additionalProperties":false}},"required":["uri","encoding","auth"],"additionalProperties":false,"description":"Details about the HTTP log sink.","default":{"method":"none"},"x-required":true},{"type":"object","properties":{"api_key":{"type":"string","description":"Ingestion Key","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"}},"required":["api_key"],"additionalProperties":false,"description":"Details about the LogDNA log sink.","x-required":true},{"type":"object","properties":{"token":{"type":"string","description":"Better Stack Source Token","example":"vhnqrLygVQ5GnSQUTZamKvAq"},"uri":{"type":"string","description":"Better stack ingestion host","example":"abc123.eu-nbg-2.betterstackdata.com"}},"required":["token","uri"],"additionalProperties":false,"description":"Details about the Better Stack log sink.","x-required":true},{"type":"object","properties":{"api_key":{"type":"string","description":"Honeycomb API Key","example":"b1dd3feb585asd1a3e9"},"dataset":{"type":"string","description":"Name of the dataset","example":"staging-logs"}},"required":["api_key","dataset"],"additionalProperties":false,"description":"Details about the Honeycomb log sink.","x-required":true},{"type":"object","properties":{"region":{"type":"string","enum":["eu","uk","us","ca","au","nl","wa"],"description":"Your Logzio region code","example":"eu"},"token":{"type":"string","description":"The Log Shipping Token of the account you want to ship to","example":"sNFijNFgNFoNFrMsNFbNFObNFcgNFqoa"}},"required":["region","token"],"additionalProperties":false,"description":"Details about the Logz.io log sink.","x-required":true},{"type":"object","properties":{"api_key":{"type":"string","description":"Solar Winds API Key","example":"Tr8BIEmYx1fuM3_XRMwU3xXEFnD20p9NFkRIu1COrDqMCM4g86qWZgVdgs1Y7mzWtFMI0Zc"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false},"endpointType":{"type":"string","enum":["unitary","bulk"],"description":"Solar Winds endpoint type"}},"required":["api_key","endpointType"],"additionalProperties":false,"description":"Details about the Solar Winds log sink.","x-required":true},{"type":"object","properties":{"dataset":{"type":"string","description":"Name of the data","example":"staging"},"token":{"type":"string","description":"Axiom API/Personal token","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"},"tokenType":{"type":"string","enum":["personal","api"],"description":"Using a personal token","example":"api"},"orgId":{"type":"string","description":"The ID of the organisation, required if using a personal token"},"url":{"type":"string","description":"The Axiom url to use. Only change if self hosting axiom.","default":"https://api.axiom.co"}},"required":["dataset","token","tokenType"],"additionalProperties":false,"description":"Details about the Axiom log sink.","x-required":true},{"type":"object","properties":{"accountId":{"type":"string","description":"New Relic Account ID","example":"b1dd3feb585asd1a3e9"},"licenseKey":{"type":"string","description":"New Relic License Key","example":"b1dd3feb585asd1a3e9"},"region":{"type":"string","enum":["eu","us"],"example":"eu"}},"required":["accountId","licenseKey","region"],"additionalProperties":false,"description":"Details about the New Relic log sink.","x-required":true},{"type":"object","properties":{"endpoint":{"type":"string","pattern":"^https:\\/\\/[\\w.-]+\\.sentry\\.io\\/","description":"The complete OTLP logs endpoint from your Sentry Client Keys configuration.","example":"https://o459080.ingest.de.sentry.io/api/5523749/integration/otlp/v1/logs"},"publicKey":{"type":"string","description":"The public key from your Sentry OTLP DSN (Client Keys (DSN) > OpenTelemetry).","example":"5cac0d8cb9414d5c80eb8467f55d5352"}},"required":["endpoint","publicKey"],"additionalProperties":false,"description":"Details about the Sentry log sink.","x-required":true}],"description":"Data about the log sink."}},"required":["name","id","restricted","projects","status","sinkType","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","log-sink"]},"v1-integrations-log-sinks--logSinkId--get-team-scoped":{"operationId":"getIntegrationsLogSinksLogsinkid","summary":"Get log sink details","description":"Gets details about a given log sink.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"Details about a log sink.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","description":"Name of the log sink.","example":"example-log-sink"},"id":{"type":"string","description":"Identifier for the Log Sink","example":"example-project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the log sink.","example":"This is an example log sink."},"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"status":{"type":"string","enum":["paused","running","failing","creating"],"description":"Current status of the log sink"},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of the log sink.","examples":["http","loki"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was created.","example":"2022-06-14 15:10:42.842Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of when the log sink was last updated.","example":"2022-06-14 15:10:42.842Z"},"sinkData":{"oneOf":[{"type":"object","properties":{"endpoint":{"type":"string","description":"The endpoint of the Loki log sink.","example":"https://logs.example.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"auth":{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"The authentication strategy.","example":"basic"},"user":{"type":"string","description":"The username for the log sink.","example":"admin"},"password":{"type":"string","description":"The password for the log sink.","example":"password1234"}},"additionalProperties":false,"description":"Object containing authentication data for the log sink."}},"required":["endpoint"],"additionalProperties":false,"description":"Details about the Loki log sink.","x-required":true},{"type":"object","properties":{"default_api_key":{"type":"string","description":"The Datadog API key.","example":"abcdef12345678900000000000000000"},"region":{"type":"string","enum":["eu","us","us3","us5"],"description":"The Datadog region.","example":"eu"}},"required":["default_api_key","region"],"additionalProperties":false,"description":"Details about the Datadog log sink.","x-required":true},{"oneOf":[{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["port"],"description":"The authentication strategy.","example":"port"},"host":{"type":"string","description":"The host for the Papertrail log destination.","example":"logs1.papertrailapp.com:"},"port":{"type":"number","format":"float","description":"The port for the Papertrail log destination.","example":8000}},"required":["authenticationStrategy","host","port"],"additionalProperties":false,"description":"Authenticate with a host/port"},{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["token"],"description":"The authentication strategy.","example":"token"},"uri":{"type":"string","description":"The uri for the Papertrail log destination.","example":"https://logs.collector.solarwinds.com/v1/log"},"token":{"type":"string","description":"The HTTP Token for the Papertrail log destination.","example":"123abcdefghijklmnopqrstuvwxy"}},"required":["authenticationStrategy","uri","token"],"additionalProperties":false,"description":"Authenticate with a token."}],"description":"Papertrail Sink Schema.","x-required":true},{"type":"object","properties":{"endpoint":{"type":"string","description":"Endpoint for the AWS S3 or compatible API bucket.","example":"my.bucket.com"},"region":{"type":"string","enum":["eu-west-1","eu-west-2","eu-west-3","eu-central-1","eu-south-1","eu-north-1","us-west-1","us-west-2","us-east-1","us-east2"],"description":"Region of the S3 bucket.","example":"eu-west-2"},"auth":{"type":"object","properties":{"accessKeyId":{"type":"string","description":"Access key id for the bucket.","example":"PMSACIHNUIASDBWQDS"},"secretAccessKey":{"type":"string","description":"Secret access key for the bucket.","example":"HA1PLMNOEAEYUHAJQMSDUJQS"}},"required":["accessKeyId","secretAccessKey"],"additionalProperties":false,"description":"Authentication object."},"bucket":{"type":"string","description":"Name of the S3 Bucket.","example":"northflank-logs"},"compression":{"type":"string","enum":["gzip","none"],"description":"Log file compression method.","example":"gzip"}},"required":["endpoint","region","bucket","compression"],"additionalProperties":false,"description":"Details about the AWS S3 log sink.","x-required":true},{"type":"object","properties":{"uri":{"type":"string","description":"Uri to send logs to.","example":"my.log-collector.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false,"description":"Encoding options"},"batch":{"type":"object","properties":{"maxEvents":{"type":"number","format":"float","description":"The max number of events in a batch before sending","example":"10","default":"20"},"maxBytes":{"type":"number","format":"float","description":"The max size of a batch in bytes before sending","example":"1e+7"}},"additionalProperties":false},"auth":{"oneOf":[{"type":"object","properties":{"strategy":{"type":"string","enum":["none"],"description":"No authentication strategy","example":"none"}},"required":["strategy"],"additionalProperties":false,"description":"No authentication strategy"},{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"Basic HTTP authentication strategy.","example":"basic"},"user":{"type":"string","description":"Username for basic http authentication.","example":"my-user"},"password":{"type":"string","description":"Password for basic http authentication.","example":"secret-password"}},"required":["strategy","password"],"additionalProperties":false,"description":"Authenticate with a basic http strategy."},{"type":"object","properties":{"strategy":{"type":"string","enum":["bearer"],"description":"Bearer token authentication strategy.","example":"bearer"},"token":{"type":"string","description":"Token for bearer token authentication.","example":"my-token"}},"required":["strategy"],"additionalProperties":false,"description":"Authenticate with a bearer token strategy."}],"description":"Auth information."},"framing":{"type":"object","properties":{"method":{"type":"string","enum":["none","newline","length"],"default":"none"}},"additionalProperties":false}},"required":["uri","encoding","auth"],"additionalProperties":false,"description":"Details about the HTTP log sink.","default":{"method":"none"},"x-required":true},{"type":"object","properties":{"api_key":{"type":"string","description":"Ingestion Key","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"}},"required":["api_key"],"additionalProperties":false,"description":"Details about the LogDNA log sink.","x-required":true},{"type":"object","properties":{"token":{"type":"string","description":"Better Stack Source Token","example":"vhnqrLygVQ5GnSQUTZamKvAq"},"uri":{"type":"string","description":"Better stack ingestion host","example":"abc123.eu-nbg-2.betterstackdata.com"}},"required":["token","uri"],"additionalProperties":false,"description":"Details about the Better Stack log sink.","x-required":true},{"type":"object","properties":{"api_key":{"type":"string","description":"Honeycomb API Key","example":"b1dd3feb585asd1a3e9"},"dataset":{"type":"string","description":"Name of the dataset","example":"staging-logs"}},"required":["api_key","dataset"],"additionalProperties":false,"description":"Details about the Honeycomb log sink.","x-required":true},{"type":"object","properties":{"region":{"type":"string","enum":["eu","uk","us","ca","au","nl","wa"],"description":"Your Logzio region code","example":"eu"},"token":{"type":"string","description":"The Log Shipping Token of the account you want to ship to","example":"sNFijNFgNFoNFrMsNFbNFObNFcgNFqoa"}},"required":["region","token"],"additionalProperties":false,"description":"Details about the Logz.io log sink.","x-required":true},{"type":"object","properties":{"api_key":{"type":"string","description":"Solar Winds API Key","example":"Tr8BIEmYx1fuM3_XRMwU3xXEFnD20p9NFkRIu1COrDqMCM4g86qWZgVdgs1Y7mzWtFMI0Zc"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"required":["codec"],"additionalProperties":false},"endpointType":{"type":"string","enum":["unitary","bulk"],"description":"Solar Winds endpoint type"}},"required":["api_key","endpointType"],"additionalProperties":false,"description":"Details about the Solar Winds log sink.","x-required":true},{"type":"object","properties":{"dataset":{"type":"string","description":"Name of the data","example":"staging"},"token":{"type":"string","description":"Axiom API/Personal token","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"},"tokenType":{"type":"string","enum":["personal","api"],"description":"Using a personal token","example":"api"},"orgId":{"type":"string","description":"The ID of the organisation, required if using a personal token"},"url":{"type":"string","description":"The Axiom url to use. Only change if self hosting axiom.","default":"https://api.axiom.co"}},"required":["dataset","token","tokenType"],"additionalProperties":false,"description":"Details about the Axiom log sink.","x-required":true},{"type":"object","properties":{"accountId":{"type":"string","description":"New Relic Account ID","example":"b1dd3feb585asd1a3e9"},"licenseKey":{"type":"string","description":"New Relic License Key","example":"b1dd3feb585asd1a3e9"},"region":{"type":"string","enum":["eu","us"],"example":"eu"}},"required":["accountId","licenseKey","region"],"additionalProperties":false,"description":"Details about the New Relic log sink.","x-required":true},{"type":"object","properties":{"endpoint":{"type":"string","pattern":"^https:\\/\\/[\\w.-]+\\.sentry\\.io\\/","description":"The complete OTLP logs endpoint from your Sentry Client Keys configuration.","example":"https://o459080.ingest.de.sentry.io/api/5523749/integration/otlp/v1/logs"},"publicKey":{"type":"string","description":"The public key from your Sentry OTLP DSN (Client Keys (DSN) > OpenTelemetry).","example":"5cac0d8cb9414d5c80eb8467f55d5352"}},"required":["endpoint","publicKey"],"additionalProperties":false,"description":"Details about the Sentry log sink.","x-required":true}],"description":"Data about the log sink."}},"required":["name","id","restricted","projects","status","sinkType","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","log-sink"]},"v1-integrations-log-sinks--logSinkId--delete":{"operationId":"deleteIntegrationsLogSinksLogsinkid","summary":"Delete log sink","description":"Deletes a log sink.","parameters":[{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","log-sink"]},"v1-integrations-log-sinks--logSinkId--delete-team-scoped":{"operationId":"deleteIntegrationsLogSinksLogsinkid","summary":"Delete log sink","description":"Deletes a log sink.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","log-sink"]},"v1-integrations-log-sinks--logSinkId--pause-post":{"operationId":"postIntegrationsLogSinksLogsinkidPause","summary":"Pause log sink","description":"Pauses a given log sink.","parameters":[{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","log-sink"]},"v1-integrations-log-sinks--logSinkId--pause-post-team-scoped":{"operationId":"postIntegrationsLogSinksLogsinkidPause","summary":"Pause log sink","description":"Pauses a given log sink.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","log-sink"]},"v1-integrations-log-sinks--logSinkId--resume-post":{"operationId":"postIntegrationsLogSinksLogsinkidResume","summary":"Resume log sink","description":"Resumes a paused log sink.","parameters":[{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","log-sink"]},"v1-integrations-log-sinks--logSinkId--resume-post-team-scoped":{"operationId":"postIntegrationsLogSinksLogsinkidResume","summary":"Resume log sink","description":"Resumes a paused log sink.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > LogSinks > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","log-sink"]},"v1-integrations-log-sinks--logSinkId--settings-post":{"operationId":"postIntegrationsLogSinksLogsinkidSettings","summary":"Update log sink","description":"Updates the settings for a log sink.","parameters":[{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"The endpoint of the Loki log sink.","example":"https://logs.example.com"},"auth":{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"The authentication method.","example":"basic"},"user":{"type":"string","description":"The username for the log sink.","example":"admin"},"password":{"type":"string","description":"The password for the log sink.","example":"password1234"}},"additionalProperties":false,"description":"Object containing authentication data for the log sink."}},"additionalProperties":false,"description":"Details about the Loki log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Loki"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"default_api_key":{"type":"string","description":"The Datadog API key.","example":"abcdef12345678900000000000000000"},"region":{"type":"string","enum":["eu","us","us3","us5"],"description":"The Datadog region.","example":"eu"}},"additionalProperties":false,"description":"Details about the Datadog log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Datadog"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"oneOf":[{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["port"],"description":"The authentication strategy.","example":"port"},"host":{"type":"string","description":"The host for the Papertrail log destination.","example":"logs1.papertrailapp.com:"},"port":{"type":"number","format":"float","description":"The port for the Papertrail log destination.","example":8000}},"additionalProperties":false,"description":"Authenticate with a host/port"},{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["token"],"description":"The authentication strategy.","example":"token"},"uri":{"type":"string","description":"The uri for the Papertrail log destination.","example":"https://logs.collector.solarwinds.com/v1/log"},"token":{"type":"string","description":"The HTTP Token for the Papertrail log destination.","example":"123abcdefghijklmnopqrstuvwxy"}},"additionalProperties":false,"description":"Authenticate with a token."}],"description":"Papertrail Sink Schema."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Papertrail"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"uri":{"type":"string","description":"Uri to send logs to.","example":"my.log-collector.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"additionalProperties":false,"description":"Encoding options"},"batch":{"type":"object","properties":{"maxEvents":{"type":"number","format":"float","description":"The max number of events in a batch before sending","example":"10","default":"20"},"maxBytes":{"type":"number","format":"float","description":"The max size of a batch in bytes before sending","example":"1e+7"}},"additionalProperties":false},"auth":{"oneOf":[{"type":"object","properties":{"strategy":{"type":"string","enum":["none"],"description":"No authentication strategy","example":"none"}},"additionalProperties":false,"description":"No authentication strategy"},{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"Basic HTTP authentication strategy.","example":"basic"},"user":{"type":"string","description":"Username for basic http authentication.","example":"my-user"},"password":{"type":"string","description":"Password for basic http authentication.","example":"secret-password"}},"additionalProperties":false,"description":"Authenticate with a basic http strategy."},{"type":"object","properties":{"strategy":{"type":"string","enum":["bearer"],"description":"Bearer token authentication strategy.","example":"bearer"},"token":{"type":"string","description":"Token for bearer token authentication.","example":"my-token"}},"additionalProperties":false,"description":"Authenticate with a bearer token strategy."}],"description":"Auth information."},"framing":{"type":"object","properties":{"method":{"type":"string","enum":["none","newline","length"],"default":"none"}},"additionalProperties":false}},"required":["uri","encoding","auth"],"additionalProperties":false,"description":"Details about the HTTP log sink.","default":{"method":"none"}}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using HTTP"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"Endpoint for the AWS S3 or compatible API bucket.","example":"my.bucket.com"},"region":{"type":"string","enum":["eu-west-1","eu-west-2","eu-west-3","eu-central-1","eu-south-1","eu-north-1","us-west-1","us-west-2","us-east-1","us-east2"],"description":"Region of the S3 bucket.","example":"eu-west-2"},"auth":{"type":"object","properties":{"accessKeyId":{"type":"string","description":"Access key id for the bucket.","example":"PMSACIHNUIASDBWQDS"},"secretAccessKey":{"type":"string","description":"Secret access key for the bucket.","example":"HA1PLMNOEAEYUHAJQMSDUJQS"}},"additionalProperties":false,"description":"Authentication object."},"bucket":{"type":"string","description":"Name of the S3 Bucket.","example":"northflank-logs"},"compression":{"type":"string","enum":["gzip","none"],"description":"Log file compression method.","example":"gzip"}},"additionalProperties":false,"description":"Details about the AWS S3 log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using AWS S3"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"token":{"type":"string","description":"Better Stack Source Token","example":"vhnqrLygVQ5GnSQUTZamKvAq"},"uri":{"type":"string","description":"Better stack ingestion host","example":"abc123.eu-nbg-2.betterstackdata.com"}},"additionalProperties":false,"description":"Details about the Better Stack log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Better Stack"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Ingestion Key","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"}},"additionalProperties":false,"description":"Details about the LogDNA log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using LogDNA"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"region":{"type":"string","enum":["eu","uk","us","ca","au","nl","wa"],"description":"Your Logzio region code","example":"eu"},"token":{"type":"string","description":"The Log Shipping Token of the account you want to ship to","example":"sNFijNFgNFoNFrMsNFbNFObNFcgNFqoa"}},"additionalProperties":false,"description":"Details about the Logz.io log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Logz.io"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Solar Winds API Key","example":"Tr8BIEmYx1fuM3_XRMwU3xXEFnD20p9NFkRIu1COrDqMCM4g86qWZgVdgs1Y7mzWtFMI0Zc"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"additionalProperties":false},"endpointType":{"type":"string","enum":["unitary","bulk"],"description":"Solar Winds endpoint type"}},"additionalProperties":false,"description":"Details about the Solar Winds log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Solar Winds"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Honeycomb API Key","example":"b1dd3feb585asd1a3e9"},"dataset":{"type":"string","description":"Name of the dataset","example":"staging-logs"}},"additionalProperties":false,"description":"Details about the Honeycomb log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Honeycomb"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"dataset":{"type":"string","description":"Name of the data","example":"staging"},"token":{"type":"string","description":"Axiom API/Personal token","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"},"tokenType":{"type":"string","enum":["personal","api"],"description":"Using a personal token","example":"api"},"orgId":{"type":"string","description":"The ID of the organisation, required if using a personal token"},"url":{"type":"string","description":"The Axiom url to use. Only change if self hosting axiom.","default":"https://api.axiom.co"}},"required":["dataset"],"additionalProperties":false,"description":"Details about the Axiom log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Axiom"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"accountId":{"type":"string","description":"New Relic Account ID","example":"b1dd3feb585asd1a3e9"},"licenseKey":{"type":"string","description":"New Relic License Key","example":"b1dd3feb585asd1a3e9"},"region":{"type":"string","enum":["eu","us"],"example":"eu"}},"additionalProperties":false,"description":"Details about the New Relic log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using New Relic"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","pattern":"^https:\\/\\/[\\w.-]+\\.sentry\\.io\\/","description":"The complete OTLP logs endpoint from your Sentry Client Keys configuration.","example":"https://o459080.ingest.de.sentry.io/api/5523749/integration/otlp/v1/logs"},"publicKey":{"type":"string","description":"The public key from your Sentry OTLP DSN (Client Keys (DSN) > OpenTelemetry).","example":"5cac0d8cb9414d5c80eb8467f55d5352"}},"additionalProperties":false,"description":"Details about the Sentry log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Sentry"}],"description":"Update a log sink"}}},"required":true},"x-nf-permission-required":"Account > Observability > LogSinks > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","log-sink"]},"v1-integrations-log-sinks--logSinkId--settings-post-team-scoped":{"operationId":"postIntegrationsLogSinksLogsinkidSettings","summary":"Update log sink","description":"Updates the settings for a log sink.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path","schema":{"name":"logSinkId","type":"string","required":true,"description":"ID of the log sink","example":"example-log-sink","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"The endpoint of the Loki log sink.","example":"https://logs.example.com"},"auth":{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"The authentication method.","example":"basic"},"user":{"type":"string","description":"The username for the log sink.","example":"admin"},"password":{"type":"string","description":"The password for the log sink.","example":"password1234"}},"additionalProperties":false,"description":"Object containing authentication data for the log sink."}},"additionalProperties":false,"description":"Details about the Loki log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Loki"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"default_api_key":{"type":"string","description":"The Datadog API key.","example":"abcdef12345678900000000000000000"},"region":{"type":"string","enum":["eu","us","us3","us5"],"description":"The Datadog region.","example":"eu"}},"additionalProperties":false,"description":"Details about the Datadog log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Datadog"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"oneOf":[{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["port"],"description":"The authentication strategy.","example":"port"},"host":{"type":"string","description":"The host for the Papertrail log destination.","example":"logs1.papertrailapp.com:"},"port":{"type":"number","format":"float","description":"The port for the Papertrail log destination.","example":8000}},"additionalProperties":false,"description":"Authenticate with a host/port"},{"type":"object","properties":{"authenticationStrategy":{"type":"string","enum":["token"],"description":"The authentication strategy.","example":"token"},"uri":{"type":"string","description":"The uri for the Papertrail log destination.","example":"https://logs.collector.solarwinds.com/v1/log"},"token":{"type":"string","description":"The HTTP Token for the Papertrail log destination.","example":"123abcdefghijklmnopqrstuvwxy"}},"additionalProperties":false,"description":"Authenticate with a token."}],"description":"Papertrail Sink Schema."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Papertrail"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"uri":{"type":"string","description":"Uri to send logs to.","example":"my.log-collector.com"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"additionalProperties":false,"description":"Encoding options"},"batch":{"type":"object","properties":{"maxEvents":{"type":"number","format":"float","description":"The max number of events in a batch before sending","example":"10","default":"20"},"maxBytes":{"type":"number","format":"float","description":"The max size of a batch in bytes before sending","example":"1e+7"}},"additionalProperties":false},"auth":{"oneOf":[{"type":"object","properties":{"strategy":{"type":"string","enum":["none"],"description":"No authentication strategy","example":"none"}},"additionalProperties":false,"description":"No authentication strategy"},{"type":"object","properties":{"strategy":{"type":"string","enum":["basic"],"description":"Basic HTTP authentication strategy.","example":"basic"},"user":{"type":"string","description":"Username for basic http authentication.","example":"my-user"},"password":{"type":"string","description":"Password for basic http authentication.","example":"secret-password"}},"additionalProperties":false,"description":"Authenticate with a basic http strategy."},{"type":"object","properties":{"strategy":{"type":"string","enum":["bearer"],"description":"Bearer token authentication strategy.","example":"bearer"},"token":{"type":"string","description":"Token for bearer token authentication.","example":"my-token"}},"additionalProperties":false,"description":"Authenticate with a bearer token strategy."}],"description":"Auth information."},"framing":{"type":"object","properties":{"method":{"type":"string","enum":["none","newline","length"],"default":"none"}},"additionalProperties":false}},"required":["uri","encoding","auth"],"additionalProperties":false,"description":"Details about the HTTP log sink.","default":{"method":"none"}}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using HTTP"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","description":"Endpoint for the AWS S3 or compatible API bucket.","example":"my.bucket.com"},"region":{"type":"string","enum":["eu-west-1","eu-west-2","eu-west-3","eu-central-1","eu-south-1","eu-north-1","us-west-1","us-west-2","us-east-1","us-east2"],"description":"Region of the S3 bucket.","example":"eu-west-2"},"auth":{"type":"object","properties":{"accessKeyId":{"type":"string","description":"Access key id for the bucket.","example":"PMSACIHNUIASDBWQDS"},"secretAccessKey":{"type":"string","description":"Secret access key for the bucket.","example":"HA1PLMNOEAEYUHAJQMSDUJQS"}},"additionalProperties":false,"description":"Authentication object."},"bucket":{"type":"string","description":"Name of the S3 Bucket.","example":"northflank-logs"},"compression":{"type":"string","enum":["gzip","none"],"description":"Log file compression method.","example":"gzip"}},"additionalProperties":false,"description":"Details about the AWS S3 log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using AWS S3"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"token":{"type":"string","description":"Better Stack Source Token","example":"vhnqrLygVQ5GnSQUTZamKvAq"},"uri":{"type":"string","description":"Better stack ingestion host","example":"abc123.eu-nbg-2.betterstackdata.com"}},"additionalProperties":false,"description":"Details about the Better Stack log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Better Stack"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Ingestion Key","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"}},"additionalProperties":false,"description":"Details about the LogDNA log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using LogDNA"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"region":{"type":"string","enum":["eu","uk","us","ca","au","nl","wa"],"description":"Your Logzio region code","example":"eu"},"token":{"type":"string","description":"The Log Shipping Token of the account you want to ship to","example":"sNFijNFgNFoNFrMsNFbNFObNFcgNFqoa"}},"additionalProperties":false,"description":"Details about the Logz.io log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Logz.io"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Solar Winds API Key","example":"Tr8BIEmYx1fuM3_XRMwU3xXEFnD20p9NFkRIu1COrDqMCM4g86qWZgVdgs1Y7mzWtFMI0Zc"},"encoding":{"type":"object","properties":{"codec":{"type":"string","enum":["text","json"],"description":"Codec to encode logs in","example":"json"}},"additionalProperties":false},"endpointType":{"type":"string","enum":["unitary","bulk"],"description":"Solar Winds endpoint type"}},"additionalProperties":false,"description":"Details about the Solar Winds log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Solar Winds"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"api_key":{"type":"string","description":"Honeycomb API Key","example":"b1dd3feb585asd1a3e9"},"dataset":{"type":"string","description":"Name of the dataset","example":"staging-logs"}},"additionalProperties":false,"description":"Details about the Honeycomb log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Honeycomb"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"dataset":{"type":"string","description":"Name of the data","example":"staging"},"token":{"type":"string","description":"Axiom API/Personal token","example":"b1dd3feb585asd1a3e9edpo9kmn5e590hg9"},"tokenType":{"type":"string","enum":["personal","api"],"description":"Using a personal token","example":"api"},"orgId":{"type":"string","description":"The ID of the organisation, required if using a personal token"},"url":{"type":"string","description":"The Axiom url to use. Only change if self hosting axiom.","default":"https://api.axiom.co"}},"required":["dataset"],"additionalProperties":false,"description":"Details about the Axiom log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Axiom"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"accountId":{"type":"string","description":"New Relic Account ID","example":"b1dd3feb585asd1a3e9"},"licenseKey":{"type":"string","description":"New Relic License Key","example":"b1dd3feb585asd1a3e9"},"region":{"type":"string","enum":["eu","us"],"example":"eu"}},"additionalProperties":false,"description":"Details about the New Relic log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using New Relic"},{"type":"object","properties":{"restricted":{"type":"boolean","description":"If `true`, only logs from the projects in `projects` will be sent to the log sink.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project.","example":"default-project"},"description":"If `restricted` is `true`, only logs from these projects will be sent to the log sink."},"options":{"type":"object","properties":{"useCustomLabels":{"type":"boolean","description":"If `true`, we will do additional parsing on your JSON formatted log lines and your extract custom labels","example":true},"forwardCdnLogs":{"type":"boolean","description":"Forward CDN logs from your workloads","example":true},"forwardIngressLogs":{"type":"boolean","description":"Forward ingress logs from your workloads","example":true},"forwardMeshLogs":{"type":"boolean","description":"Forward mesh logs from your workloads","example":true}},"additionalProperties":false},"resumeLogSink":{"type":"boolean","description":"If `true`, and the log sink is currently paused, the log sink will be resumed after updating.","example":false,"default":false},"sinkType":{"type":"string","enum":["loki","datadog_logs","papertrail","http","aws_s3","logdna","coralogix","betterStack","honeycomb","logzio","solarWinds","axiom","newRelic","sentry"],"description":"The type of log sink to target","example":"http"},"sinkData":{"type":"object","properties":{"endpoint":{"type":"string","pattern":"^https:\\/\\/[\\w.-]+\\.sentry\\.io\\/","description":"The complete OTLP logs endpoint from your Sentry Client Keys configuration.","example":"https://o459080.ingest.de.sentry.io/api/5523749/integration/otlp/v1/logs"},"publicKey":{"type":"string","description":"The public key from your Sentry OTLP DSN (Client Keys (DSN) > OpenTelemetry).","example":"5cac0d8cb9414d5c80eb8467f55d5352"}},"additionalProperties":false,"description":"Details about the Sentry log sink."}},"required":["sinkType","sinkData"],"additionalProperties":false,"description":"Update a log sink using Sentry"}],"description":"Update a log sink"}}},"required":true},"x-nf-permission-required":"Account > Observability > LogSinks > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","log-sink"]},"v1-integrations-notifications-get":{"operationId":"getIntegrationsNotifications","summary":"List notification integrations","description":"Lists notification integrations for the authenticated user, team or org.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of notification integrations for the authenticated user, team or org","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"notificationIntegrations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"id":{"type":"string","description":"The ID of the notification integration.","example":"example-notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","SLACK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"status":{"type":"object","properties":{"disabled":{"type":"boolean","description":"Is the webhook currently disabled?","example":false},"reason":{"type":"boolean","description":"Why the webhook was disabled."}},"additionalProperties":false,"description":"Information on the current webhook status."},"createdAt":{"type":"string","format":"date-time","description":"Creation date","example":"2023-09-12T16:39:44.166Z\""},"updatedAt":{"type":"string","format":"date-time","description":"Last update date","example":"2023-09-12T16:39:44.166Z\""}},"required":["name","id","type","webhook","createdAt","updatedAt"],"additionalProperties":false},"description":"An array of notification integrations on the account."}},"required":["notificationIntegrations"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","org"],"security":[],"x-nf-permission-required":"Account > Observability > Notifications > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","notifications"]},"v1-integrations-notifications-get-team-scoped":{"operationId":"getIntegrationsNotifications","summary":"List notification integrations","description":"Lists notification integrations for the authenticated user, team or org.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of notification integrations for the authenticated user, team or org","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"notificationIntegrations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"id":{"type":"string","description":"The ID of the notification integration.","example":"example-notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","SLACK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"status":{"type":"object","properties":{"disabled":{"type":"boolean","description":"Is the webhook currently disabled?","example":false},"reason":{"type":"boolean","description":"Why the webhook was disabled."}},"additionalProperties":false,"description":"Information on the current webhook status."},"createdAt":{"type":"string","format":"date-time","description":"Creation date","example":"2023-09-12T16:39:44.166Z\""},"updatedAt":{"type":"string","format":"date-time","description":"Last update date","example":"2023-09-12T16:39:44.166Z\""}},"required":["name","id","type","webhook","createdAt","updatedAt"],"additionalProperties":false},"description":"An array of notification integrations on the account."}},"required":["notificationIntegrations"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > Notifications > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","notifications"]},"v1-integrations-notifications-post":{"operationId":"postIntegrationsNotifications","summary":"Create notification integration","description":"Create a new notification integration.","parameters":[{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"Details of a notification integration","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"id":{"type":"string","description":"The ID of the notification integration.","example":"example-notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","SLACK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"createdAt":{"type":"string","format":"date-time","description":"Creation date","example":"2023-09-12T16:39:44.166Z\""},"updatedAt":{"type":"string","format":"date-time","description":"Last update date","example":"2023-09-12T16:39:44.166Z\""},"status":{"type":"object","properties":{"disabled":{"type":"boolean","description":"Is the webhook currently disabled?","example":false},"reason":{"type":"boolean","description":"Why the webhook was disabled."},"timeOfFirstFailedRequest":{"type":"string","format":"date-time","description":"The timestamp of the first failed webhook request."},"numberOfFailedRequests":{"type":"number","format":"float","description":"The number of failed webhook requests."}},"additionalProperties":false},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for."},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"required":["name","id","type","webhook","createdAt","updatedAt","restricted","projects","events"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"secret":{"type":"string","description":"An optional secret that will be sent in the webhook header for verification. Supports `RAW_WEBHOOK` only."},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true,"default":false},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for.","default":[]},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"required":["name","type","webhook","events"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Observability > Notifications > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","notification"]},"v1-integrations-notifications-post-team-scoped":{"operationId":"postIntegrationsNotifications","summary":"Create notification integration","description":"Create a new notification integration.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"Details of a notification integration","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"id":{"type":"string","description":"The ID of the notification integration.","example":"example-notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","SLACK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"createdAt":{"type":"string","format":"date-time","description":"Creation date","example":"2023-09-12T16:39:44.166Z\""},"updatedAt":{"type":"string","format":"date-time","description":"Last update date","example":"2023-09-12T16:39:44.166Z\""},"status":{"type":"object","properties":{"disabled":{"type":"boolean","description":"Is the webhook currently disabled?","example":false},"reason":{"type":"boolean","description":"Why the webhook was disabled."},"timeOfFirstFailedRequest":{"type":"string","format":"date-time","description":"The timestamp of the first failed webhook request."},"numberOfFailedRequests":{"type":"number","format":"float","description":"The number of failed webhook requests."}},"additionalProperties":false},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for."},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"required":["name","id","type","webhook","createdAt","updatedAt","restricted","projects","events"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"secret":{"type":"string","description":"An optional secret that will be sent in the webhook header for verification. Supports `RAW_WEBHOOK` only."},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true,"default":false},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for.","default":[]},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"required":["name","type","webhook","events"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Observability > Notifications > Create","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["create","notification"]},"v1-integrations-notifications--notificationId--get":{"operationId":"getIntegrationsNotificationsNotificationid","summary":"Get notification integration","description":"Get details about a notification integration.","parameters":[{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"Details of a notification integration","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"id":{"type":"string","description":"The ID of the notification integration.","example":"example-notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","SLACK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"createdAt":{"type":"string","format":"date-time","description":"Creation date","example":"2023-09-12T16:39:44.166Z\""},"updatedAt":{"type":"string","format":"date-time","description":"Last update date","example":"2023-09-12T16:39:44.166Z\""},"status":{"type":"object","properties":{"disabled":{"type":"boolean","description":"Is the webhook currently disabled?","example":false},"reason":{"type":"boolean","description":"Why the webhook was disabled."},"timeOfFirstFailedRequest":{"type":"string","format":"date-time","description":"The timestamp of the first failed webhook request."},"numberOfFailedRequests":{"type":"number","format":"float","description":"The number of failed webhook requests."}},"additionalProperties":false},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for."},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"required":["name","id","type","webhook","createdAt","updatedAt","restricted","projects","events"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","org"],"security":[],"x-nf-permission-required":"Account > Observability > Notifications > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","notification"]},"v1-integrations-notifications--notificationId--get-team-scoped":{"operationId":"getIntegrationsNotificationsNotificationid","summary":"Get notification integration","description":"Get details about a notification integration.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"Details of a notification integration","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"id":{"type":"string","description":"The ID of the notification integration.","example":"example-notification"},"type":{"type":"string","enum":["RAW_WEBHOOK","SLACK","DISCORD","TEAMS","TEAMS_WORKFLOWS"],"description":"The provider to send webhooks to. `RAW_WEBHOOK` allows you to send webhooks to a url of your choice, or you can choose a specific provider.","example":"RAW_WEBHOOK"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"createdAt":{"type":"string","format":"date-time","description":"Creation date","example":"2023-09-12T16:39:44.166Z\""},"updatedAt":{"type":"string","format":"date-time","description":"Last update date","example":"2023-09-12T16:39:44.166Z\""},"status":{"type":"object","properties":{"disabled":{"type":"boolean","description":"Is the webhook currently disabled?","example":false},"reason":{"type":"boolean","description":"Why the webhook was disabled."},"timeOfFirstFailedRequest":{"type":"string","format":"date-time","description":"The timestamp of the first failed webhook request."},"numberOfFailedRequests":{"type":"number","format":"float","description":"The number of failed webhook requests."}},"additionalProperties":false},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for."},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"required":["name","id","type","webhook","createdAt","updatedAt","restricted","projects","events"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > Notifications > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["get","notification"]},"v1-integrations-notifications--notificationId--post":{"operationId":"postIntegrationsNotificationsNotificationid","summary":"Update notification integration","description":"Updates a notification integration","parameters":[{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"secret":{"type":"string","description":"An optional secret that will be sent in the webhook header for verification. Supports `RAW_WEBHOOK` only."},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for."},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Observability > Notifications > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["update","notification"]},"v1-integrations-notifications--notificationId--post-team-scoped":{"operationId":"postIntegrationsNotificationsNotificationid","summary":"Update notification integration","description":"Updates a notification integration","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the notification integration.","example":"Example Notification"},"webhook":{"type":"string","description":"The URL where webhooks will be sent.","example":"https://example.com/webhooks"},"secret":{"type":"string","description":"An optional secret that will be sent in the webhook header for verification. Supports `RAW_WEBHOOK` only."},"restricted":{"type":"boolean","description":"Should notifications be sent only for specific projects?","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"default-project"},"description":"An array of projects that notifications will be sent for."},"restrictions":{"type":"object","properties":{"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"events":{"type":"object","properties":{"trigger:service:autoscaling:event":{"type":"boolean","example":true},"trigger:service:deployment:status-update":{"type":"boolean","example":true},"trigger:harness:autoscaling:event":{"type":"boolean","example":true},"trigger:harness:deployment:status-update":{"type":"boolean","example":true},"trigger:project:tailscale-regen-failure":{"type":"boolean","example":true},"trigger:addon-backup:start":{"type":"boolean","example":true},"trigger:addon-backup:success":{"type":"boolean","example":true},"trigger:addon-backup:failure":{"type":"boolean","example":true},"trigger:addon-backup:abort":{"type":"boolean","example":true},"trigger:build:start":{"type":"boolean","example":true},"trigger:build:success":{"type":"boolean","example":true},"trigger:build:failure":{"type":"boolean","example":true},"trigger:build:abort":{"type":"boolean","example":true},"trigger:job-run:start":{"type":"boolean","example":true},"trigger:job-run:success":{"type":"boolean","example":true},"trigger:job-run:failure":{"type":"boolean","example":true},"trigger:job-run:abort":{"type":"boolean","example":true},"trigger:job-run:terminate":{"type":"boolean","example":true},"trigger:release-flow-template-run:start":{"type":"boolean","example":true},"trigger:release-flow-template-run:update":{"type":"boolean","example":true},"trigger:release-flow-template-run:success":{"type":"boolean","example":true},"trigger:release-flow-template-run:failure":{"type":"boolean","example":true},"trigger:release-flow-template-run:aborted":{"type":"boolean","example":true},"trigger:template-run:queued":{"type":"boolean","example":true},"trigger:template-run:start":{"type":"boolean","example":true},"trigger:template-run:update":{"type":"boolean","example":true},"trigger:template-run:success":{"type":"boolean","example":true},"trigger:template-run:failure":{"type":"boolean","example":true},"trigger:resource:certificate-success":{"type":"boolean","example":true},"trigger:resource:certificate-final-failure":{"type":"boolean","example":true},"trigger:cdn:action-success":{"type":"boolean","example":true},"trigger:cdn:action-failure":{"type":"boolean","example":true},"trigger:cdn:action-delay":{"type":"boolean","example":true},"trigger:log-sink:paused":{"type":"boolean","example":true},"trigger:billing:billing-alert-exceeded":{"type":"boolean","example":true},"trigger:billing:invoice-payment-action-required":{"type":"boolean","example":true},"trigger:billing:invoice-payment-failed":{"type":"boolean","example":true},"trigger:billing:invoice-paid":{"type":"boolean","example":true},"trigger:billing:invoice-carried-over":{"type":"boolean","example":true},"trigger:infrastructure:service:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:service:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:job:container-crash":{"type":"boolean","example":true},"trigger:infrastructure:job:container-eviction":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSpike90":{"type":"boolean","example":true},"trigger:infrastructure:addon:container-cpuSustained90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:build:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:service:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySpike90":{"type":"boolean","example":true},"trigger:infrastructure:job:container-memorySustained90":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-75-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:platform-volume:usage-90-exceeded":{"type":"boolean","example":true},"trigger:infrastructure:addon-volume:disk-autoresize-triggered":{"type":"boolean","example":true},"trigger:infrastructure:byoc:cluster:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:node-pool:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:scheduling:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:error":{"type":"boolean","example":true},"trigger:infrastructure:byoc:volume:attach":{"type":"boolean","example":true}},"additionalProperties":false,"description":"Which events should notifications be sent for?"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Observability > Notifications > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["update","notification"]},"v1-integrations-notifications--notificationId--delete":{"operationId":"deleteIntegrationsNotificationsNotificationid","summary":"Delete notification integration","description":"Deletes a notification integration","parameters":[{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","org"],"security":[],"x-nf-permission-required":"Account > Observability > Notifications > Delete","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","notification"]},"v1-integrations-notifications--notificationId--delete-team-scoped":{"operationId":"deleteIntegrationsNotificationsNotificationid","summary":"Delete notification integration","description":"Deletes a notification integration","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path","schema":{"name":"notificationId","type":"string","required":true,"description":"ID of the notification integration","example":"example-notification-id","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Observability > Notifications > Delete","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","notification"]},"v1-integrations-registries-get":{"operationId":"getIntegrationsRegistries","summary":"List registries","description":"Lists the container registry credentials saved to this account. Does not display secrets.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of registry credentials saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the docker credentials","example":"example-credentials"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","retrying","suspended"]},"failureCount":{"type":"integer","minimum":0},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"lastFailureAt":{"type":"string","format":"date-time"},"nextAttemptAt":{"type":"string","format":"date-time"},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["status","failureCount","retryDelay"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","registryCredentialRefresh","name","provider"],"additionalProperties":false},"description":"An array of registry credential information."}},"required":["credentials"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > Registries > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","registry-credentials"]},"v1-integrations-registries-get-team-scoped":{"operationId":"getIntegrationsRegistries","summary":"List registries","description":"Lists the container registry credentials saved to this account. Does not display secrets.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of registry credentials saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the docker credentials","example":"example-credentials"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","retrying","suspended"]},"failureCount":{"type":"integer","minimum":0},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"lastFailureAt":{"type":"string","format":"date-time"},"nextAttemptAt":{"type":"string","format":"date-time"},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["status","failureCount","retryDelay"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","registryCredentialRefresh","name","provider"],"additionalProperties":false},"description":"An array of registry credential information."}},"required":["credentials"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Registries > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","registry-credentials"]},"v1-integrations-registries-post":{"operationId":"postIntegrationsRegistries","summary":"Add registry","description":"Adds a new set of container registry credentials to this account.","parameters":[],"responses":{"200":{"description":"Data about the newly created credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the docker credentials","example":"example-credentials"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","retrying","suspended"]},"failureCount":{"type":"integer","minimum":0},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"lastFailureAt":{"type":"string","format":"date-time"},"nextAttemptAt":{"type":"string","format":"date-time"},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["status","failureCount","retryDelay"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","registryCredentialRefresh","name","provider"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name","provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Registries > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","registry-credentials"]},"v1-integrations-registries-post-team-scoped":{"operationId":"postIntegrationsRegistries","summary":"Add registry","description":"Adds a new set of container registry credentials to this account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Data about the newly created credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the docker credentials","example":"example-credentials"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","retrying","suspended"]},"failureCount":{"type":"integer","minimum":0},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"lastFailureAt":{"type":"string","format":"date-time"},"nextAttemptAt":{"type":"string","format":"date-time"},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["status","failureCount","retryDelay"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","registryCredentialRefresh","name","provider"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name","provider"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Registries > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","registry-credentials"]},"v1-integrations-registries--credentialId--get":{"operationId":"getIntegrationsRegistriesCredentialid","summary":"Get registry","description":"Views a set of registry credential data.","parameters":[{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path","schema":{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path"}}],"responses":{"200":{"description":"Data about the registry credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the docker credentials","example":"example-credentials"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","retrying","suspended"]},"failureCount":{"type":"integer","minimum":0},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"lastFailureAt":{"type":"string","format":"date-time"},"nextAttemptAt":{"type":"string","format":"date-time"},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["status","failureCount","retryDelay"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","registryCredentialRefresh","name","provider"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > Registries > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","registry-credentials"]},"v1-integrations-registries--credentialId--get-team-scoped":{"operationId":"getIntegrationsRegistriesCredentialid","summary":"Get registry","description":"Views a set of registry credential data.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path","schema":{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path"}}],"responses":{"200":{"description":"Data about the registry credentials.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the docker credentials","example":"example-credentials"},"registryCredentialRefresh":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","retrying","suspended"]},"failureCount":{"type":"integer","minimum":0},"retryDelay":{"type":"integer","minimum":0,"description":"Delay in milliseconds before the next refresh attempt."},"lastFailureAt":{"type":"string","format":"date-time"},"nextAttemptAt":{"type":"string","format":"date-time"},"error":{"type":"object","properties":{"type":{"type":"string"},"message":{"type":"string"},"providerCode":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["status","failureCount","retryDelay"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the docker credentials.","example":"Example Docker Credentials"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"The provider of the docker registry."},"registryUrl":{"type":"string","description":"The URL of the docker registry."},"aws":{"type":"object","properties":{"region":{"type":"string","description":"The region of the docker registry."}},"additionalProperties":false},"gcp":{"type":"object","properties":{"projectId":{"type":"string","description":"The project ID of the GCP docker registry."}},"additionalProperties":false},"azure":{"type":"object","properties":{"resourceGroup":{"type":"string","description":"The resource group of the Azure docker registry."}},"additionalProperties":false},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this registry."},"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","registryCredentialRefresh","name","provider"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Registries > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","registry-credentials"]},"v1-integrations-registries--credentialId--patch":{"operationId":"patchIntegrationsRegistriesCredentialid","summary":"Update registry","description":"Updates a set of registry credential data.","parameters":[{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path","schema":{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Registries > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","registry-credentials"]},"v1-integrations-registries--credentialId--patch-team-scoped":{"operationId":"patchIntegrationsRegistriesCredentialid","summary":"Update registry","description":"Updates a set of registry credential data.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path","schema":{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"credentials":{"type":"object","properties":{"username":{"type":"string","description":"Username for the docker registry. Required when `integrationId` is provided."},"password":{"type":"string","description":"Password for the docker registry. Required when `integrationId` is provided."},"scope":{"type":"object","properties":{"pull":{"type":"boolean","description":"Whether the credentials can pull images."},"push":{"type":"boolean","description":"Whether the credentials can push images."}},"additionalProperties":false}},"required":["scope"],"additionalProperties":false},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether access to this credential is restricted."},"projects":{"type":"array","items":{"type":"string"},"description":"List of projects that have access to this credential."}},"required":["restricted"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > Registries > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","registry-credentials"]},"v1-integrations-registries--credentialId--delete":{"operationId":"deleteIntegrationsRegistriesCredentialid","summary":"Delete registry","description":"Deletes a set of registry credential data.","parameters":[{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path","schema":{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > Registries > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","registry-credentials"]},"v1-integrations-registries--credentialId--delete-team-scoped":{"operationId":"deleteIntegrationsRegistriesCredentialid","summary":"Delete registry","description":"Deletes a set of registry credential data.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path","schema":{"name":"credentialId","type":"string","required":true,"description":"ID of the registry credential","example":"example-credentials","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > Registries > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","registry-credentials"]},"v1-integrations-ssh-identities-get":{"operationId":"getIntegrationsSshIdentities","summary":"List SSH identities","description":"Lists the SSH identities saved to this account. Does not display SSH public keys.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of SSH identities saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"identities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"An array of SSH Identities"}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Platform > Ssh > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","ssh-identities"]},"v1-integrations-ssh-identities-get-team-scoped":{"operationId":"getIntegrationsSshIdentities","summary":"List SSH identities","description":"Lists the SSH identities saved to this account. Does not display SSH public keys.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of SSH identities saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"identities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"An array of SSH Identities"}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Platform > Ssh > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","ssh-identities"]},"v1-integrations-ssh-identities-post":{"operationId":"postIntegrationsSshIdentities","summary":"Add SSH identity","description":"Adds a new SSH identity to this account.","parameters":[],"responses":{"200":{"description":"Data about the newly created SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Ssh > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","ssh-identities"]},"v1-integrations-ssh-identities-post-team-scoped":{"operationId":"postIntegrationsSshIdentities","summary":"Add SSH identity","description":"Adds a new SSH identity to this account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Data about the newly created SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Ssh > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","ssh-identities"]},"v1-integrations-ssh-identities--identityId--get":{"operationId":"getIntegrationsSshIdentitiesIdentityid","summary":"Get SSH identity","description":"Views SSH identity data including public keys.","parameters":[{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"Data about the SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Platform > Ssh > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","ssh-identities"]},"v1-integrations-ssh-identities--identityId--get-team-scoped":{"operationId":"getIntegrationsSshIdentitiesIdentityid","summary":"Get SSH identity","description":"Views SSH identity data including public keys.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"Data about the SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Platform > Ssh > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","ssh-identities"]},"v1-integrations-ssh-identities--identityId--put":{"operationId":"putIntegrationsSshIdentitiesIdentityid","summary":"Create or update SSH identity","description":"Creates or updates SSH identity data.","parameters":[{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"Data about the SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Ssh > Update","x-nf-team-scoped":true,"x-nf-cli-command":["put","ssh-identities"]},"v1-integrations-ssh-identities--identityId--put-team-scoped":{"operationId":"putIntegrationsSshIdentitiesIdentityid","summary":"Create or update SSH identity","description":"Creates or updates SSH identity data.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"Data about the SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Ssh > Update","x-nf-team-scoped":true,"x-nf-cli-command":["put","ssh-identities"]},"v1-integrations-ssh-identities--identityId--patch":{"operationId":"patchIntegrationsSshIdentitiesIdentityid","summary":"Update SSH identity","description":"Updates SSH identity data.","parameters":[{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"Data about the SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects."}},"additionalProperties":false},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false}},"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Ssh > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","ssh-identities"]},"v1-integrations-ssh-identities--identityId--patch-team-scoped":{"operationId":"patchIntegrationsSshIdentitiesIdentityid","summary":"Update SSH identity","description":"Updates SSH identity data.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"Data about the SSH identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the ssh identity","example":"example-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example SSH Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"sshPublicKeys":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The SSH public key.","example":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}},"required":["key"],"additionalProperties":false},"minItems":1,"description":"A list of SSH public keys.","example":[{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."}]},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects."}},"additionalProperties":false},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false}},"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Ssh > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","ssh-identities"]},"v1-integrations-ssh-identities--identityId--delete":{"operationId":"deleteIntegrationsSshIdentitiesIdentityid","summary":"Delete SSH identity","description":"Deletes an SSH identity.","parameters":[{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Platform > Ssh > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","ssh-identities"]},"v1-integrations-ssh-identities--identityId--delete-team-scoped":{"operationId":"deleteIntegrationsSshIdentitiesIdentityid","summary":"Delete SSH identity","description":"Deletes an SSH identity.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path","schema":{"name":"identityId","type":"string","required":true,"description":"ID of the SSH identity","example":"example-ssh-identity","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Platform > Ssh > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","ssh-identities"]},"v1-integrations-vcs-get":{"operationId":"getIntegrationsVcs","summary":"List VCS providers","description":"Lists linked version control providers","parameters":[],"responses":{"200":{"description":"Details about the version control providers available for use.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vcsAccountLinks":{"type":"array","items":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The type of version control provider the account is linked to.","example":"self-hosted"},"email":{"type":"string","oneOf":[{},{"x-required":true}],"description":"The email of the account linked with this provider.","example":"email@example.com"},"login":{"type":"string","description":"The username of the account linked with this provider.","example":"vcs-user"},"vcsLinkId":{"type":"string","description":"The ID of this linked version control account. Pass this value as `vcsLinkId` when creating a harness or service from this account.","example":"63ebb6ce2ccc6c7affdbf253"},"alias":{"type":"string","description":"A user-defined alias for the linked version control account, if set.","example":"my-github"},"name":{"type":"string","description":"The name of the version control provider. Only returned for self-hosted links.","example":"Self-hosted VCS"},"vcsUrl":{"type":"string","description":"The url of the version control provider. Only returned for self-hosted links.","example":"https://git.example.com"},"vcsType":{"type":"string","enum":["gitlab-ee","github-ghe","gitea"],"description":"The type of the self-hosted vcs provider. Only returned for self-hosted links.","example":"gitlab-ee"},"internalId":{"type":"string","description":"The ID of the self-hosted vcs provider. Only returned for self-hosted links.","example":"example-team/self-hosted-vcs"},"entityName":{"type":"string","description":"The name of the team the self-hosted vcs belongs to. Only returned for self-hosted links.","example":"Example Team"},"originTargetSlug":{"type":"string","description":"The Cursor Origin installation target slug.","example":"example-team"},"originRepoSelectionMode":{"type":"string","enum":["all","selected"],"description":"Whether the Origin installation grants all or selected repositories."},"originScopes":{"type":"array","items":{"type":"string"},"description":"The repository scopes granted to the Origin installation."},"originMissingScopes":{"type":"array","items":{"type":"string"},"description":"The Origin scopes required for full Northflank functionality but not granted."}},"required":["vcsService","login","vcsLinkId"],"additionalProperties":false,"description":"Details about the linked version control account."},"description":"The version control accounts linked to this Northflank account."}},"required":["vcsAccountLinks"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","vcs"]},"v1-integrations-vcs-get-team-scoped":{"operationId":"getIntegrationsVcs","summary":"List VCS providers","description":"Lists linked version control providers","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the version control providers available for use.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vcsAccountLinks":{"type":"array","items":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The type of version control provider the account is linked to.","example":"self-hosted"},"email":{"type":"string","oneOf":[{},{"x-required":true}],"description":"The email of the account linked with this provider.","example":"email@example.com"},"login":{"type":"string","description":"The username of the account linked with this provider.","example":"vcs-user"},"vcsLinkId":{"type":"string","description":"The ID of this linked version control account. Pass this value as `vcsLinkId` when creating a harness or service from this account.","example":"63ebb6ce2ccc6c7affdbf253"},"alias":{"type":"string","description":"A user-defined alias for the linked version control account, if set.","example":"my-github"},"name":{"type":"string","description":"The name of the version control provider. Only returned for self-hosted links.","example":"Self-hosted VCS"},"vcsUrl":{"type":"string","description":"The url of the version control provider. Only returned for self-hosted links.","example":"https://git.example.com"},"vcsType":{"type":"string","enum":["gitlab-ee","github-ghe","gitea"],"description":"The type of the self-hosted vcs provider. Only returned for self-hosted links.","example":"gitlab-ee"},"internalId":{"type":"string","description":"The ID of the self-hosted vcs provider. Only returned for self-hosted links.","example":"example-team/self-hosted-vcs"},"entityName":{"type":"string","description":"The name of the team the self-hosted vcs belongs to. Only returned for self-hosted links.","example":"Example Team"},"originTargetSlug":{"type":"string","description":"The Cursor Origin installation target slug.","example":"example-team"},"originRepoSelectionMode":{"type":"string","enum":["all","selected"],"description":"Whether the Origin installation grants all or selected repositories."},"originScopes":{"type":"array","items":{"type":"string"},"description":"The repository scopes granted to the Origin installation."},"originMissingScopes":{"type":"array","items":{"type":"string"},"description":"The Origin scopes required for full Northflank functionality but not granted."}},"required":["vcsService","login","vcsLinkId"],"additionalProperties":false,"description":"Details about the linked version control account."},"description":"The version control accounts linked to this Northflank account."}},"required":["vcsAccountLinks"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","vcs"]},"v1-integrations-vcs-custom--customVCSId--token--vcsLinkId--post":{"operationId":"postIntegrationsVcsCustomCustomvcsidTokenVcslinkid","summary":"Generate VCS token","description":"Generate a token for a specific VCS link.","parameters":[{"name":"customVCSId","type":"string","required":true,"description":"ID of the custom VCS","example":"cdb3d41f-0dd8-49ad-92d5-7544c98c490b","in":"path","schema":{"name":"customVCSId","type":"string","required":true,"description":"ID of the custom VCS","example":"cdb3d41f-0dd8-49ad-92d5-7544c98c490b","in":"path"}},{"name":"vcsLinkId","type":"string","required":true,"description":"ID of the version control link","example":"63ebb6ce2ccc6c7affdbf253","in":"path","schema":{"name":"vcsLinkId","type":"string","required":true,"description":"ID of the version control link","example":"63ebb6ce2ccc6c7affdbf253","in":"path"}},{"name":"force_refresh","type":"boolean","in":"query","schema":{"name":"force_refresh","type":"boolean","in":"query"}}],"responses":{"200":{"description":"A version control access token for the provided link.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"VCS provider the token belongs to.","example":"github"},"installationId":{"type":"integer","description":"Installation ID of the GitHub installation the token belongs to (GitHub only)","example":1234567},"installationToken":{"type":"string","description":"Installation token (GitHub only).","example":"ghs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},"token":{"type":"string","description":"OAuth token.","example":"ghu_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}},"required":["vcsService","token"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Git > Tokens > Read","x-nf-team-scoped":true,"x-nf-cli-command":["create","custom-vcs","token"]},"v1-integrations-vcs-custom--customVCSId--token--vcsLinkId--post-team-scoped":{"operationId":"postIntegrationsVcsCustomCustomvcsidTokenVcslinkid","summary":"Generate VCS token","description":"Generate a token for a specific VCS link.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"customVCSId","type":"string","required":true,"description":"ID of the custom VCS","example":"cdb3d41f-0dd8-49ad-92d5-7544c98c490b","in":"path","schema":{"name":"customVCSId","type":"string","required":true,"description":"ID of the custom VCS","example":"cdb3d41f-0dd8-49ad-92d5-7544c98c490b","in":"path"}},{"name":"vcsLinkId","type":"string","required":true,"description":"ID of the version control link","example":"63ebb6ce2ccc6c7affdbf253","in":"path","schema":{"name":"vcsLinkId","type":"string","required":true,"description":"ID of the version control link","example":"63ebb6ce2ccc6c7affdbf253","in":"path"}},{"name":"force_refresh","type":"boolean","in":"query","schema":{"name":"force_refresh","type":"boolean","in":"query"}}],"responses":{"200":{"description":"A version control access token for the provided link.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"VCS provider the token belongs to.","example":"github"},"installationId":{"type":"integer","description":"Installation ID of the GitHub installation the token belongs to (GitHub only)","example":1234567},"installationToken":{"type":"string","description":"Installation token (GitHub only).","example":"ghs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},"token":{"type":"string","description":"OAuth token.","example":"ghu_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}},"required":["vcsService","token"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Git > Tokens > Read","x-nf-team-scoped":true,"x-nf-cli-command":["create","custom-vcs","token"]},"v1-integrations-vcs-link-sessions-post":{"operationId":"postIntegrationsVcsLinkSessions","summary":"Create VCS link session","description":"Starts a CLI-driven flow to link a version control account. Returns a URL to open in a browser to authorize the link, and a session id to poll for completion.","parameters":[],"responses":{"200":{"description":"The link session id and browser authorize URL.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the link session, used to poll for completion.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"},"authorizeUrl":{"type":"string","description":"URL to open in a browser to authorize the version control link. Carries only a one-time link code — never the API token.","example":"https://app.northflank.com/api/integrations/git/state-bridge?linkCode=..."}},"required":["id","authorizeUrl"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"Version control provider to link. Supported values are `github`, `gitlab`, and feature-gated `origin`. Defaults to `github`.","example":"github","default":"github"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Git > General > Manage","x-nf-team-scoped":true},"v1-integrations-vcs-link-sessions-post-team-scoped":{"operationId":"postIntegrationsVcsLinkSessions","summary":"Create VCS link session","description":"Starts a CLI-driven flow to link a version control account. Returns a URL to open in a browser to authorize the link, and a session id to poll for completion.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"The link session id and browser authorize URL.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the link session, used to poll for completion.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"},"authorizeUrl":{"type":"string","description":"URL to open in a browser to authorize the version control link. Carries only a one-time link code — never the API token.","example":"https://app.northflank.com/api/integrations/git/state-bridge?linkCode=..."}},"required":["id","authorizeUrl"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"Version control provider to link. Supported values are `github`, `gitlab`, and feature-gated `origin`. Defaults to `github`.","example":"github","default":"github"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Git > General > Manage","x-nf-team-scoped":true},"v1-integrations-vcs-link-sessions--linkSessionId--get":{"operationId":"getIntegrationsVcsLinkSessionsLinksessionid","summary":"Get VCS link session","description":"Gets the status of a version control link session, for polling until completion.","parameters":[{"name":"linkSessionId","type":"string","required":true,"description":"ID of the version control link session","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","in":"path","schema":{"name":"linkSessionId","type":"string","required":true,"description":"ID of the version control link session","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","in":"path"}}],"responses":{"200":{"description":"The status of the link session.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pending","completed","failed"],"description":"Current status of the link session.","example":"pending"},"vcsLinkId":{"type":"string","description":"ID of the created version control link. Present when `status` is `completed`.","example":"63ebb6ce2ccc6c7affdbf253"},"error":{"type":"string","description":"Reason the link failed. Present when `status` is `failed`.","example":"Failed to link version control account"}},"required":["status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Git > General > Manage","x-nf-team-scoped":true},"v1-integrations-vcs-link-sessions--linkSessionId--get-team-scoped":{"operationId":"getIntegrationsVcsLinkSessionsLinksessionid","summary":"Get VCS link session","description":"Gets the status of a version control link session, for polling until completion.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"linkSessionId","type":"string","required":true,"description":"ID of the version control link session","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","in":"path","schema":{"name":"linkSessionId","type":"string","required":true,"description":"ID of the version control link session","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6","in":"path"}}],"responses":{"200":{"description":"The status of the link session.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pending","completed","failed"],"description":"Current status of the link session.","example":"pending"},"vcsLinkId":{"type":"string","description":"ID of the created version control link. Present when `status` is `completed`.","example":"63ebb6ce2ccc6c7affdbf253"},"error":{"type":"string","description":"Reason the link failed. Present when `status` is `failed`.","example":"Failed to link version control account"}},"required":["status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Git > General > Manage","x-nf-team-scoped":true},"v1-integrations-vcs-repo-access-post":{"operationId":"postIntegrationsVcsRepoAccess","summary":"Check repository access","description":"Checks whether a git repository is publicly reachable or accessible via one of your linked version control accounts, before creating a resource that would clone it.","parameters":[],"responses":{"200":{"description":"The access status of the repository.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"publicRepo":{"type":"boolean","description":"Whether the repository is publicly reachable without a linked account.","example":false},"accessible":{"type":"boolean","description":"Whether the repository can be accessed — publicly or via a linked account.","example":true},"vcsLinkId":{"type":"string","description":"The linked account that can access the repository. Present when `reason` is `linked-account`.","example":"63ebb6ce2ccc6c7affdbf253"},"accountLogin":{"type":"string","description":"Login of the linked account that can access the repository. Present when `reason` is `linked-account`.","example":"example-user"},"reason":{"type":"string","enum":["public","linked-account","no-linked-access","not-found"],"description":"Why the repository is (in)accessible: `public` (reachable anonymously), `linked-account` (a linked account can access it), `no-linked-access` (no linked account can access it), or `not-found` (the repository URL does not resolve).","example":"linked-account"}},"required":["publicRepo","accessible","reason"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"projectUrl":{"type":"string","description":"HTTPS URL of the git repository to check access for.","example":"https://github.com/northflank-examples/next-js-example"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The version control provider the repository belongs to.","example":"github"},"projectBranch":{"type":"string","description":"Optional branch to check.","example":"main"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"If provided, only checks access via this specific linked account."},"accountLogin":{"type":"string","description":"If provided, only checks access via the linked account with this login.","example":"example-user"},"selfHostedVcsId":{"type":"string","oneOf":[{"type":"string","oneOf":[{"x-required":true}]}],"description":"The self-hosted provider document ID, internalId, or team/internalId. Required for self-hosted repositories unless vcsLinkId identifies the provider."}},"required":["projectUrl","projectType"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true},"v1-integrations-vcs-repo-access-post-team-scoped":{"operationId":"postIntegrationsVcsRepoAccess","summary":"Check repository access","description":"Checks whether a git repository is publicly reachable or accessible via one of your linked version control accounts, before creating a resource that would clone it.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"The access status of the repository.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"publicRepo":{"type":"boolean","description":"Whether the repository is publicly reachable without a linked account.","example":false},"accessible":{"type":"boolean","description":"Whether the repository can be accessed — publicly or via a linked account.","example":true},"vcsLinkId":{"type":"string","description":"The linked account that can access the repository. Present when `reason` is `linked-account`.","example":"63ebb6ce2ccc6c7affdbf253"},"accountLogin":{"type":"string","description":"Login of the linked account that can access the repository. Present when `reason` is `linked-account`.","example":"example-user"},"reason":{"type":"string","enum":["public","linked-account","no-linked-access","not-found"],"description":"Why the repository is (in)accessible: `public` (reachable anonymously), `linked-account` (a linked account can access it), `no-linked-access` (no linked account can access it), or `not-found` (the repository URL does not resolve).","example":"linked-account"}},"required":["publicRepo","accessible","reason"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"projectUrl":{"type":"string","description":"HTTPS URL of the git repository to check access for.","example":"https://github.com/northflank-examples/next-js-example"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The version control provider the repository belongs to.","example":"github"},"projectBranch":{"type":"string","description":"Optional branch to check.","example":"main"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"If provided, only checks access via this specific linked account."},"accountLogin":{"type":"string","description":"If provided, only checks access via the linked account with this login.","example":"example-user"},"selfHostedVcsId":{"type":"string","oneOf":[{"type":"string","oneOf":[{"x-required":true}]}],"description":"The self-hosted provider document ID, internalId, or team/internalId. Required for self-hosted repositories unless vcsLinkId identifies the provider."}},"required":["projectUrl","projectType"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true},"v1-integrations-vcs-repos-get":{"operationId":"getIntegrationsVcsRepos","summary":"List repositories","description":"Gets a list of repositories accessible to this account","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"vcs_service","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns repositories belonging to this version control provider.","example":"github","in":"query","schema":{"name":"vcs_service","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns repositories belonging to this version control provider.","example":"github","in":"query"}},{"name":"self_hosted_vcs_id","type":"string","description":"If provided, only returns repositories belonging to this self-hosted version control provider.","in":"query","schema":{"name":"self_hosted_vcs_id","type":"string","description":"If provided, only returns repositories belonging to this self-hosted version control provider.","in":"query"}},{"name":"account_login","type":"string","description":"If provided, only returns repositories that can be accessed by the linked version control account with this name.","example":"example-user","in":"query","schema":{"name":"account_login","type":"string","description":"If provided, only returns repositories that can be accessed by the linked version control account with this name.","example":"example-user","in":"query"}},{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, only returns repositories belong to that VCS link.","in":"query","schema":{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, only returns repositories belong to that VCS link.","in":"query"}}],"responses":{"200":{"description":"The list of repos.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"repos":{"type":"array","items":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"Version control provider of the repository.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If `vcsService` is `self-hosted`, the ID of the self-hosted provider."},"id":{"type":"string","description":"The repository identifier assigned by the version control provider. Northflank always returns it as a string.","example":"123456789"},"name":{"type":"string","description":"The name of the repository.","example":"gatsby-with-northflank"},"full_name":{"type":"string","description":"The full name of the repository.","example":"northflank/gatsby-with-northflank"},"url":{"type":"string","description":"The url of the repository.","example":"https://github.com/northflank/gatsby-with-northflank"},"owner":{"type":"object","properties":{"login":{"type":"string","description":"The login of the repository owner.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the repository owner."},"accountLogin":{"type":"string","description":"The login of the linked version control account that can access this repository.","example":"example-user"}},"required":["vcsService","id","name","full_name","url","owner","accountLogin"],"additionalProperties":false,"description":"Details about an accessible repository."},"description":"A list of accessible repositories."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","repos"]},"v1-integrations-vcs-repos-get-team-scoped":{"operationId":"getIntegrationsVcsRepos","summary":"List repositories","description":"Gets a list of repositories accessible to this account","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"vcs_service","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns repositories belonging to this version control provider.","example":"github","in":"query","schema":{"name":"vcs_service","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns repositories belonging to this version control provider.","example":"github","in":"query"}},{"name":"self_hosted_vcs_id","type":"string","description":"If provided, only returns repositories belonging to this self-hosted version control provider.","in":"query","schema":{"name":"self_hosted_vcs_id","type":"string","description":"If provided, only returns repositories belonging to this self-hosted version control provider.","in":"query"}},{"name":"account_login","type":"string","description":"If provided, only returns repositories that can be accessed by the linked version control account with this name.","example":"example-user","in":"query","schema":{"name":"account_login","type":"string","description":"If provided, only returns repositories that can be accessed by the linked version control account with this name.","example":"example-user","in":"query"}},{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, only returns repositories belong to that VCS link.","in":"query","schema":{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, only returns repositories belong to that VCS link.","in":"query"}}],"responses":{"200":{"description":"The list of repos.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"repos":{"type":"array","items":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"Version control provider of the repository.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If `vcsService` is `self-hosted`, the ID of the self-hosted provider."},"id":{"type":"string","description":"The repository identifier assigned by the version control provider. Northflank always returns it as a string.","example":"123456789"},"name":{"type":"string","description":"The name of the repository.","example":"gatsby-with-northflank"},"full_name":{"type":"string","description":"The full name of the repository.","example":"northflank/gatsby-with-northflank"},"url":{"type":"string","description":"The url of the repository.","example":"https://github.com/northflank/gatsby-with-northflank"},"owner":{"type":"object","properties":{"login":{"type":"string","description":"The login of the repository owner.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the repository owner."},"accountLogin":{"type":"string","description":"The login of the linked version control account that can access this repository.","example":"example-user"}},"required":["vcsService","id","name","full_name","url","owner","accountLogin"],"additionalProperties":false,"description":"Details about an accessible repository."},"description":"A list of accessible repositories."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","repos"]},"v1-integrations-vcs-repos--vcsService---repositoryOwner---repositoryName--branches-get":{"operationId":"getIntegrationsVcsReposVcsserviceRepositoryownerRepositorynameBranches","summary":"List branches","description":"Gets a list of branches for the repo","parameters":[{"name":"vcsService","type":"string","required":true,"description":"Version control provider of the repository","example":"github","in":"path","schema":{"name":"vcsService","type":"string","required":true,"description":"Version control provider of the repository","example":"github","in":"path"}},{"name":"repositoryOwner","type":"string","required":true,"description":"Name of the owner of the repository","example":"northflank-examples","in":"path","schema":{"name":"repositoryOwner","type":"string","required":true,"description":"Name of the owner of the repository","example":"northflank-examples","in":"path"}},{"name":"repositoryName","type":"string","required":true,"description":"Name of the repository","example":"next-js-example","in":"path","schema":{"name":"repositoryName","type":"string","required":true,"description":"Name of the repository","example":"next-js-example","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, uses the given VCS link to access the repository's data.","in":"query","schema":{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, uses the given VCS link to access the repository's data.","in":"query"}}],"responses":{"200":{"description":"The list of branches.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"branches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the branch.","example":"main"},"id":{"type":"string","example":"MDM6UmVmMzA0MDU5MzM0OnJlZnMvaGVhZHMvbWFpbg="},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"SHA identifier of the commit.","example":"f8aca180e989be62cba71db629d2ede05f2d10c4"},"author":{"type":"object","properties":{"login":{"type":"string","description":"The login of the commit author.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the commit author."},"message":{"type":"string","description":"Commit message of the commit.","example":"Initial commit"},"date":{"type":"string","format":"date-time","description":"Timestamp of the commit.","example":"2021-09-17T14:04:39.000Z"}},"required":["sha","author"],"additionalProperties":false,"description":"Details about the most recent commit on the branch."}},"required":["name","id","commit"],"additionalProperties":false,"description":"Details about a branch."},"description":"A list of branches for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","branches"]},"v1-integrations-vcs-repos--vcsService---repositoryOwner---repositoryName--branches-get-team-scoped":{"operationId":"getIntegrationsVcsReposVcsserviceRepositoryownerRepositorynameBranches","summary":"List branches","description":"Gets a list of branches for the repo","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"vcsService","type":"string","required":true,"description":"Version control provider of the repository","example":"github","in":"path","schema":{"name":"vcsService","type":"string","required":true,"description":"Version control provider of the repository","example":"github","in":"path"}},{"name":"repositoryOwner","type":"string","required":true,"description":"Name of the owner of the repository","example":"northflank-examples","in":"path","schema":{"name":"repositoryOwner","type":"string","required":true,"description":"Name of the owner of the repository","example":"northflank-examples","in":"path"}},{"name":"repositoryName","type":"string","required":true,"description":"Name of the repository","example":"next-js-example","in":"path","schema":{"name":"repositoryName","type":"string","required":true,"description":"Name of the repository","example":"next-js-example","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, uses the given VCS link to access the repository's data.","in":"query","schema":{"name":"vcs_link_id","type":"string","minLength":24,"maxLength":24,"description":"If provided, uses the given VCS link to access the repository's data.","in":"query"}}],"responses":{"200":{"description":"The list of branches.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"branches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the branch.","example":"main"},"id":{"type":"string","example":"MDM6UmVmMzA0MDU5MzM0OnJlZnMvaGVhZHMvbWFpbg="},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"SHA identifier of the commit.","example":"f8aca180e989be62cba71db629d2ede05f2d10c4"},"author":{"type":"object","properties":{"login":{"type":"string","description":"The login of the commit author.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the commit author."},"message":{"type":"string","description":"Commit message of the commit.","example":"Initial commit"},"date":{"type":"string","format":"date-time","description":"Timestamp of the commit.","example":"2021-09-17T14:04:39.000Z"}},"required":["sha","author"],"additionalProperties":false,"description":"Details about the most recent commit on the branch."}},"required":["name","id","commit"],"additionalProperties":false,"description":"Details about a branch."},"description":"A list of branches for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Git > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","branches"]},"v1-load-balancers-get":{"operationId":"getLoadBalancers","summary":"List load balancers","description":"Gets a list of load balancers belonging to the team","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of load balancers belonging to the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"loadBalancers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"}},"required":["status"],"additionalProperties":false},"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["name","spec","id","createdAt","updatedAt"],"additionalProperties":false,"description":"A load balancer object."},"description":"An array of load balancers."}},"required":["loadBalancers"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers"],"security":[],"x-nf-permission-required":"Account > Networking > LoadBalancers > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","load-balancers"]},"v1-load-balancers-get-team-scoped":{"operationId":"getLoadBalancers","summary":"List load balancers","description":"Gets a list of load balancers belonging to the team","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of load balancers belonging to the team.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"loadBalancers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"}},"required":["status"],"additionalProperties":false},"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["name","spec","id","createdAt","updatedAt"],"additionalProperties":false,"description":"A load balancer object."},"description":"An array of load balancers."}},"required":["loadBalancers"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers","team"],"security":[],"x-nf-permission-required":"Account > Networking > LoadBalancers > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","load-balancers"]},"v1-load-balancers-post":{"operationId":"postLoadBalancers","summary":"Create load balancer","description":"Creates a new load balancer","parameters":[],"responses":{"200":{"description":"Details about the newly created load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > LoadBalancers > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","load-balancer"]},"v1-load-balancers-post-team-scoped":{"operationId":"postLoadBalancers","summary":"Create load balancer","description":"Creates a new load balancer","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the newly created load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > LoadBalancers > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","load-balancer"]},"v1-load-balancers-put":{"operationId":"putLoadBalancers","summary":"Put load balancer","description":"Creates or updates a load balancer","parameters":[],"responses":{"200":{"description":"Details about the created or updated load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > LoadBalancers > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","load-balancer"]},"v1-load-balancers-put-team-scoped":{"operationId":"putLoadBalancers","summary":"Put load balancer","description":"Creates or updates a load balancer","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created or updated load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > LoadBalancers > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","load-balancer"]},"v1-load-balancers--loadBalancerId--get":{"operationId":"getLoadBalancersLoadbalancerid","summary":"Get load balancer","description":"Gets information about the given load balancer","parameters":[{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path","schema":{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path"}}],"responses":{"200":{"description":"Details about the load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers"],"security":[],"x-nf-permission-required":"Account > Networking > LoadBalancers > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","load-balancer"]},"v1-load-balancers--loadBalancerId--get-team-scoped":{"operationId":"getLoadBalancersLoadbalancerid","summary":"Get load balancer","description":"Gets information about the given load balancer","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path","schema":{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path"}}],"responses":{"200":{"description":"Details about the load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers","team"],"security":[],"x-nf-permission-required":"Account > Networking > LoadBalancers > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","load-balancer"]},"v1-load-balancers--loadBalancerId--patch":{"operationId":"patchLoadBalancersLoadbalancerid","summary":"Patch load balancer","description":"Updates a load balancer","parameters":[{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path","schema":{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path"}}],"responses":{"200":{"description":"Details about the updated load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > LoadBalancers > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","load-balancer"]},"v1-load-balancers--loadBalancerId--patch-team-scoped":{"operationId":"patchLoadBalancersLoadbalancerid","summary":"Patch load balancer","description":"Updates a load balancer","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path","schema":{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path"}}],"responses":{"200":{"description":"Details about the updated load balancer.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the load balancer","example":"my-load-balancer"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"},"state":{"type":"object","properties":{"endpoints":{"type":"array","items":{"anyOf":[{"type":"string"}],"description":"Network address assigned to the load balancer"},"description":"Network addresses assigned to the load balancer","example":["203.0.113.1","internal-example.elb.amazonaws.com"]},"status":{"type":"string","enum":["staging","loading","created","error","deleting","deleted"],"description":"Current status of the load balancer","example":"created"},"lastTransitionTime":{"type":"string","format":"date-time","description":"Time of the last status transition"}},"required":["status","lastTransitionTime"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the load balancer was created.","example":"2021-01-20T11:19:53.175Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the load balancer was last updated.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","name","spec","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the load balancer.","example":"my-load-balancer"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the load balancer.","example":"This is a new load balancer."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["tcp","udp"],"description":"Protocol type for the load balancer","example":"tcp"},"visibility":{"type":"string","enum":["public","private"],"description":"Network visibility of the load balancer; defaults to public on creation","example":"public"},"target":{"type":"object","properties":{"type":{"type":"string","enum":["region","cluster"],"description":"Target type for the load balancer","example":"region"},"targetId":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9]+(-[A-Za-z0-9]+)*$","description":"Target region name","example":"europe-west","x-required":true},{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Target cluster internal ID","example":"my-cluster","x-required":true}],"description":"Id of the loadbalancer target"}},"required":["type"],"additionalProperties":false,"description":"Load balancer target. The target cannot be changed after creation."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^port-\\d+$","description":"Unique port identifier","example":"port-80"},"port":{"type":"string","description":"Port number or range (single port, multiple comma-separated, or range with dash)","examples":["80","80,443,8000-9000"]},"customSettings":{"type":"object","properties":{"bridgeTlsMode":{"type":"boolean","default":false},"proxyProtocol":{"type":"string","enum":["v2"],"description":"PROXY protocol version sent to backends for this port; omit to disable"},"subdomainId":{"type":"string","description":"Full name of the load balancer subdomain linked to this port (TLS bridge mode)","example":"api.example.com"}},"additionalProperties":false},"backends":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9-]+\\/[a-zA-Z0-9-]+$","description":"Backend reference in format {projectId}/{nfObjectId}","example":"my-project/my-service"},"type":{"type":"string","enum":["service","addon"],"description":"Backend type (service or addon)","example":"service"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"Backend port number","example":3000},"weight":{"type":"integer","minimum":1,"maximum":100,"description":"Traffic weight for this backend","example":1,"default":1}},"required":["id","type","port"],"additionalProperties":false},"minItems":1,"description":"Backend services or addons for this port"}},"required":["id","port","backends"],"additionalProperties":false},"minItems":1,"description":"Port configurations for the load balancer"}},"required":["type","target","ports"],"additionalProperties":false,"description":"Load balancer specification"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > LoadBalancers > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","load-balancer"]},"v1-load-balancers--loadBalancerId--delete":{"operationId":"deleteLoadBalancersLoadbalancerid","summary":"Delete load balancer","description":"Deletes the given load balancer.","parameters":[{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path","schema":{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers"],"security":[],"x-nf-permission-required":"Account > Networking > LoadBalancers > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","load-balancer"]},"v1-load-balancers--loadBalancerId--delete-team-scoped":{"operationId":"deleteLoadBalancersLoadbalancerid","summary":"Delete load balancer","description":"Deletes the given load balancer.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path","schema":{"name":"loadBalancerId","type":"string","required":true,"description":"ID of the load balancer","example":"my-load-balancer","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Load Balancers","team"],"security":[],"x-nf-permission-required":"Account > Networking > LoadBalancers > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","load-balancer"]},"v1-logs-get":{"operationId":"getLogs","summary":"Get logs for a resource","description":"Get logs for any Northflank resource","parameters":[{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits logs to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits logs to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query"}},{"name":"podName","type":"string","description":"Name of the pod to see logs of","default":"acme-6b97845ff4-cwkj4","in":"query","schema":{"name":"podName","type":"string","description":"Name of the pod to see logs of","default":"acme-6b97845ff4-cwkj4","in":"query"}},{"name":"projectId","type":"string","description":"Name of the project the resources belong to","in":"query","schema":{"name":"projectId","type":"string","description":"Name of the project the resources belong to","in":"query"}},{"name":"clusterId","type":"string","description":"Name of the cluster the resources belong to","in":"query","schema":{"name":"clusterId","type":"string","description":"Name of the cluster the resources belong to","in":"query"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","Jobs","Services"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","logs"]},"v1-logs-get-team-scoped":{"operationId":"getLogs","summary":"Get logs for a resource","description":"Get logs for any Northflank resource","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits logs to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits logs to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query"}},{"name":"podName","type":"string","description":"Name of the pod to see logs of","default":"acme-6b97845ff4-cwkj4","in":"query","schema":{"name":"podName","type":"string","description":"Name of the pod to see logs of","default":"acme-6b97845ff4-cwkj4","in":"query"}},{"name":"projectId","type":"string","description":"Name of the project the resources belong to","in":"query","schema":{"name":"projectId","type":"string","description":"Name of the project the resources belong to","in":"query"}},{"name":"clusterId","type":"string","description":"Name of the cluster the resources belong to","in":"query","schema":{"name":"clusterId","type":"string","description":"Name of the cluster the resources belong to","in":"query"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","Jobs","Services","team"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","logs"]},"v1-network-policies-post":{"operationId":"postNetworkPolicies","summary":"Create network policy","description":"Creates a new network policy for this account.","parameters":[],"responses":{"200":{"description":"success"}},"tags":["Network Policies"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the network policy.","example":"restrict-api-ingress"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the network policy.","example":"Restrict ingress to the api service."},"spec":{"type":"object","properties":{"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled","items"],"additionalProperties":false},"tags":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"matchCondition":{"type":"string","enum":["or","and"]}},"required":["enabled","items","matchCondition"],"additionalProperties":false}},"required":["projects","tags"],"additionalProperties":false,"default":{"projects":{"enabled":true,"items":[],"restrictionMode":"in"},"tags":{"enabled":true,"items":[],"matchCondition":"and"}}},"egress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowTo":{"type":"array","items":{"type":"string","minLength":1},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as destinations cannot be assigned when all traffic is denied"}],"description":"External destinations that egress traffic is allowed to"},"allowToTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that egress traffic is allowed to"},"allowToProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that egress traffic is allowed to"}},"additionalProperties":false},"ingress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowFromTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that ingress traffic is allowed from"},"allowFromProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that ingress traffic is allowed from"}},"additionalProperties":false},"loadBalancerIngress":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"minItems":1,"uniqueItems":true,"description":"Load balancer internal IDs this ingress rule applies to."},"mode":{"type":"string","enum":["allowList","denyList"],"description":"Whether the listed source ranges are allowed or denied."},"cidrs":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true,"description":"Source IP addresses and CIDR ranges."}},"required":["targets","mode","cidrs"],"additionalProperties":false,"nullable":true,"description":"Controls client ingress to selected load balancers."},"egressSecretInjection":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","maxLength":63},"header":{"type":"string","pattern":"^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$","maxLength":256},"hosts":{"type":"array","items":{"type":"string","maxLength":253},"minItems":1},"value":{"type":"string"}},"required":["name","header","hosts","value"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > NetworkPolicies > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","network-policy"]},"v1-network-policies-post-team-scoped":{"operationId":"postNetworkPolicies","summary":"Create network policy","description":"Creates a new network policy for this account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the network policy.","example":"restrict-api-ingress"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the network policy.","example":"Restrict ingress to the api service."},"spec":{"type":"object","properties":{"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"required":["enabled","items"],"additionalProperties":false},"tags":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"matchCondition":{"type":"string","enum":["or","and"]}},"required":["enabled","items","matchCondition"],"additionalProperties":false}},"required":["projects","tags"],"additionalProperties":false,"default":{"projects":{"enabled":true,"items":[],"restrictionMode":"in"},"tags":{"enabled":true,"items":[],"matchCondition":"and"}}},"egress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowTo":{"type":"array","items":{"type":"string","minLength":1},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as destinations cannot be assigned when all traffic is denied"}],"description":"External destinations that egress traffic is allowed to"},"allowToTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that egress traffic is allowed to"},"allowToProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that egress traffic is allowed to"}},"additionalProperties":false},"ingress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowFromTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that ingress traffic is allowed from"},"allowFromProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that ingress traffic is allowed from"}},"additionalProperties":false},"loadBalancerIngress":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"minItems":1,"uniqueItems":true,"description":"Load balancer internal IDs this ingress rule applies to."},"mode":{"type":"string","enum":["allowList","denyList"],"description":"Whether the listed source ranges are allowed or denied."},"cidrs":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true,"description":"Source IP addresses and CIDR ranges."}},"required":["targets","mode","cidrs"],"additionalProperties":false,"nullable":true,"description":"Controls client ingress to selected load balancers."},"egressSecretInjection":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","maxLength":63},"header":{"type":"string","pattern":"^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$","maxLength":256},"hosts":{"type":"array","items":{"type":"string","maxLength":253},"minItems":1},"value":{"type":"string"}},"required":["name","header","hosts","value"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > NetworkPolicies > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","network-policy"]},"v1-network-policies--networkPolicyId--get":{"operationId":"getNetworkPoliciesNetworkpolicyid","summary":"Get network policy","description":"Get details of a network policy.","parameters":[{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path","schema":{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies"],"security":[],"x-nf-permission-required":"Account > Networking > NetworkPolicies > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","network-policy"]},"v1-network-policies--networkPolicyId--get-team-scoped":{"operationId":"getNetworkPoliciesNetworkpolicyid","summary":"Get network policy","description":"Get details of a network policy.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path","schema":{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies","team"],"security":[],"x-nf-permission-required":"Account > Networking > NetworkPolicies > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","network-policy"]},"v1-network-policies--networkPolicyId--patch":{"operationId":"patchNetworkPoliciesNetworkpolicyid","summary":"Update network policy","description":"Updates an existing network policy.","parameters":[{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path","schema":{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the network policy.","example":"restrict-api-ingress"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the network policy.","example":"Restrict ingress to the api service."},"spec":{"type":"object","properties":{"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"additionalProperties":false},"tags":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"matchCondition":{"type":"string","enum":["or","and"]}},"additionalProperties":false}},"additionalProperties":false},"egress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowTo":{"type":"array","items":{"type":"string","minLength":1},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as destinations cannot be assigned when all traffic is denied"}],"description":"External destinations that egress traffic is allowed to"},"allowToTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that egress traffic is allowed to"},"allowToProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that egress traffic is allowed to"}},"additionalProperties":false},"ingress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowFromTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that ingress traffic is allowed from"},"allowFromProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that ingress traffic is allowed from"}},"additionalProperties":false},"loadBalancerIngress":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"minItems":1,"uniqueItems":true,"description":"Load balancer internal IDs this ingress rule applies to."},"mode":{"type":"string","enum":["allowList","denyList"],"description":"Whether the listed source ranges are allowed or denied."},"cidrs":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true,"description":"Source IP addresses and CIDR ranges."}},"required":["targets","mode","cidrs"],"additionalProperties":false,"nullable":true,"description":"Controls client ingress to selected load balancers."},"egressSecretInjection":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","maxLength":63},"header":{"type":"string","pattern":"^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$","maxLength":256},"hosts":{"type":"array","items":{"type":"string","maxLength":253},"minItems":1},"value":{"type":"string"}},"required":["name","header","hosts","value"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > NetworkPolicies > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","network-policy"]},"v1-network-policies--networkPolicyId--patch-team-scoped":{"operationId":"patchNetworkPoliciesNetworkpolicyid","summary":"Update network policy","description":"Updates an existing network policy.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path","schema":{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the network policy.","example":"restrict-api-ingress"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the network policy.","example":"Restrict ingress to the api service."},"spec":{"type":"object","properties":{"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"restrictionMode":{"type":"string","enum":["in","notIn"]}},"additionalProperties":false},"tags":{"type":"object","properties":{"enabled":{"type":"boolean"},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"matchCondition":{"type":"string","enum":["or","and"]}},"additionalProperties":false}},"additionalProperties":false},"egress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowTo":{"type":"array","items":{"type":"string","minLength":1},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as destinations cannot be assigned when all traffic is denied"}],"description":"External destinations that egress traffic is allowed to"},"allowToTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that egress traffic is allowed to"},"allowToProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that egress traffic is allowed to"}},"additionalProperties":false},"ingress":{"type":"object","properties":{"denyAll":{"type":"boolean"},"allowFromTags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as tags cannot be assigned when all traffic is denied"}],"description":"Tags of workloads that ingress traffic is allowed from"},"allowFromProjects":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"oneOf":[{"type":"array","items":{},"maxItems":0,"nullable":true,"description":"Must be empty or null, as projects cannot be assigned when all traffic is denied"}],"description":"Projects that ingress traffic is allowed from"}},"additionalProperties":false},"loadBalancerIngress":{"type":"object","properties":{"targets":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"minItems":1,"uniqueItems":true,"description":"Load balancer internal IDs this ingress rule applies to."},"mode":{"type":"string","enum":["allowList","denyList"],"description":"Whether the listed source ranges are allowed or denied."},"cidrs":{"type":"array","items":{"type":"string"},"minItems":1,"uniqueItems":true,"description":"Source IP addresses and CIDR ranges."}},"required":["targets","mode","cidrs"],"additionalProperties":false,"nullable":true,"description":"Controls client ingress to selected load balancers."},"egressSecretInjection":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?$","maxLength":63},"header":{"type":"string","pattern":"^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$","maxLength":256},"hosts":{"type":"array","items":{"type":"string","maxLength":253},"minItems":1},"value":{"type":"string"}},"required":["name","header","hosts","value"],"additionalProperties":false},"uniqueItems":true}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Networking > NetworkPolicies > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","network-policy"]},"v1-network-policies--networkPolicyId--delete":{"operationId":"deleteNetworkPoliciesNetworkpolicyid","summary":"Delete network policy","description":"Deletes a network policy and removes all associated CNPs from the cluster.","parameters":[{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path","schema":{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies"],"security":[],"x-nf-permission-required":"Account > Networking > NetworkPolicies > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","network-policy"]},"v1-network-policies--networkPolicyId--delete-team-scoped":{"operationId":"deleteNetworkPoliciesNetworkpolicyid","summary":"Delete network policy","description":"Deletes a network policy and removes all associated CNPs from the cluster.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path","schema":{"name":"networkPolicyId","type":"string","required":true,"description":"ID of the network policy","example":"my-network-policy","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Network Policies","team"],"security":[],"x-nf-permission-required":"Account > Networking > NetworkPolicies > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","network-policy"]},"v1-opentofu-jobs--opentofuJobId--logs-get":{"operationId":"getOpentofuJobsOpentofujobidLogs","summary":"Get OpenTofu job logs","description":"Get logs for an OpenTofu job","parameters":[{"name":"opentofuJobId","type":"string","required":true,"description":"ID of the opentofu job","example":"example-job","in":"path","schema":{"name":"opentofuJobId","type":"string","required":true,"description":"ID of the opentofu job","example":"example-job","in":"path"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["OpenTofu"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","opentofu-job","logs"]},"v1-opentofu-jobs--opentofuJobId--logs-get-team-scoped":{"operationId":"getOpentofuJobsOpentofujobidLogs","summary":"Get OpenTofu job logs","description":"Get logs for an OpenTofu job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"opentofuJobId","type":"string","required":true,"description":"ID of the opentofu job","example":"example-job","in":"path","schema":{"name":"opentofuJobId","type":"string","required":true,"description":"ID of the opentofu job","example":"example-job","in":"path"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["OpenTofu","team"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","opentofu-job","logs"]},"v1-projects-get":{"operationId":"getProjects","summary":"List projects","description":"Lists projects for the authenticated user or team.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of projects for the authenticated user","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project.","example":"default-project"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"The name of the project.","example":"Default Project"},"description":{"type":"string","description":"A short description of the project.","example":"The project description"}},"required":["id","uid","name"],"additionalProperties":false,"description":"A project object."},"description":"An array of projects."}},"required":["projects"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","projects"]},"v1-projects-get-team-scoped":{"operationId":"getProjects","summary":"List projects","description":"Lists projects for the authenticated user or team.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of projects for the authenticated user","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project.","example":"default-project"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"The name of the project.","example":"Default Project"},"description":{"type":"string","description":"A short description of the project.","example":"The project description"}},"required":["id","uid","name"],"additionalProperties":false,"description":"A project object."},"description":"An array of projects."}},"required":["projects"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects","team"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","projects"]},"v1-projects-post":{"operationId":"postProjects","summary":"Create project","description":"Creates a new project.","parameters":[],"responses":{"200":{"description":"Details about the created project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project","example":"example-project"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"required":["credentialId"],"additionalProperties":false}},"additionalProperties":false,"description":"Registry configuration for the project. Can be PaaS or Self-Hosted"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"time of update","example":"2000-01-01T12:00:00.000Z"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a Northflank region"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a BYOC cluster"}],"description":"Create a project"}}},"required":true},"x-nf-permission-required":"Project > Projects > Manage > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","project"]},"v1-projects-post-team-scoped":{"operationId":"postProjects","summary":"Create project","description":"Creates a new project.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project","example":"example-project"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"required":["credentialId"],"additionalProperties":false}},"additionalProperties":false,"description":"Registry configuration for the project. Can be PaaS or Self-Hosted"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"time of update","example":"2000-01-01T12:00:00.000Z"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a Northflank region"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a BYOC cluster"}],"description":"Create a project"}}},"required":true},"x-nf-permission-required":"Project > Projects > Manage > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","project"]},"v1-projects-put":{"operationId":"putProjects","summary":"Create or update project","description":"Creates or updates a project.","parameters":[],"responses":{"200":{"description":"Details about the created or updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project","example":"example-project"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"required":["credentialId"],"additionalProperties":false}},"additionalProperties":false,"description":"Registry configuration for the project. Can be PaaS or Self-Hosted"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"time of update","example":"2000-01-01T12:00:00.000Z"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a Northflank region"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a BYOC cluster"}],"description":"Create a project"}}},"required":true},"x-nf-permission-required":"Project > Projects > Manage > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","project"]},"v1-projects-put-team-scoped":{"operationId":"putProjects","summary":"Create or update project","description":"Creates or updates a project.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the created or updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project","example":"example-project"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"required":["credentialId"],"additionalProperties":false}},"additionalProperties":false,"description":"Registry configuration for the project. Can be PaaS or Self-Hosted"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"time of update","example":"2000-01-01T12:00:00.000Z"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a Northflank region"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."}},"required":["name"],"additionalProperties":false,"description":"Create a project in a BYOC cluster"}],"description":"Create a project"}}},"required":true},"x-nf-permission-required":"Project > Projects > Manage > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","project"]},"v1-projects--projectId--patch":{"operationId":"patchProjectsProjectid","summary":"Update project","description":"Updates a project.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project","example":"example-project"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"required":["credentialId"],"additionalProperties":false}},"additionalProperties":false,"description":"Registry configuration for the project. Can be PaaS or Self-Hosted"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"time of update","example":"2000-01-01T12:00:00.000Z"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources"},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons."},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores)."},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated"}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"additionalProperties":false}},"additionalProperties":false},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container"},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Projects > Manage > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","project"]},"v1-projects--projectId--patch-team-scoped":{"operationId":"patchProjectsProjectid","summary":"Update project","description":"Updates a project.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the updated project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project","example":"example-project"},"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the project.","example":"New Project"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"region":{"type":"string","description":"The region the project will be hosted in.","example":"europe-west"},"clusterId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The BYOC cluster this project will be hosted in.","example":"gcp-cluster-1"},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"credentialId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"required":["credentialId"],"additionalProperties":false}},"additionalProperties":false,"description":"Registry configuration for the project. Can be PaaS or Self-Hosted"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources","default":false},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client.","default":[]},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons.","default":false},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores).","default":false},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated","default":false}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"required":["clientId","clientSecret"],"additionalProperties":false,"description":"Relevant Tailscale secrets"}},"additionalProperties":false,"description":"Defines this project's Tailscale sidecar settings"},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container","default":false},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false}},"additionalProperties":false,"description":"Defines the project host alias overrides to apply to /etc/hosts in resource containers"}},"additionalProperties":false,"description":"Advanced project networking settings."},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"time of update","example":"2000-01-01T12:00:00.000Z"}},"required":["id","name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description of the project.","example":"This is a new project."},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","description":"The color of the project in the Northflank App.","example":"#EF233C"},"networking":{"type":"object","properties":{"allowedIngressProjects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$"},"description":"Projects from which ingress request should be permitted."},"tailscale":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to inject a Tailscale sidecar for this project's resources"},"authKeyTags":{"type":"array","items":{"type":"string","pattern":"^tag:.+"},"description":"Tailscale tags to apply to generated auth keys, must match with the tags applied when creating the OAuth Client."},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false},"options":{"type":"object","properties":{"applyToAddons":{"type":"boolean","description":"Apply the Tailscale configuration to addons."},"applyToAddonJobs":{"type":"boolean","description":"Apply the Tailscale configuration to addon jobs (backups, restores)."},"autoRedeployOnRegeneration":{"type":"boolean","description":"Automatically restart applicable services when the auth key is regenerated"}},"additionalProperties":false},"tailscaleOptions":{"type":"object","properties":{"acceptRoutes":{"type":"boolean","description":"Accept advertised routes from the Tailscale network","default":false},"tailnetServicesEnabled":{"type":"boolean","description":"Enable automatic creation of Tailnet services for resources in this project","default":false},"useUnscopedServiceNames":{"type":"boolean","description":"Use the service internal ID as the Tailnet Service name without the project UID. This causes undefined behavior when two services in the tailnet have matching internal IDs.","default":false},"tailnetServicesRestrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"required":["enabled"],"additionalProperties":false,"description":"Restrict which resources get Tailnet services created for them"}},"additionalProperties":false},"secrets":{"type":"object","properties":{"clientId":{"type":"string","description":"Tailscale OAuth client ID (required for generating auth keys for Tailscale)"},"clientSecret":{"type":"string","description":"Tailscale OAuth client secret (required for generating auth keys for Tailscale)"}},"additionalProperties":false}},"additionalProperties":false},"hostAliases":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable support for adding /etc/hosts overrides for a container"},"hostEntries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string","pattern":"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"},"hostnames":{"type":"array","items":{"type":"string","pattern":"^(([a-z0-9][a-z0-9-]*)|[a-z0-9]\\.)*([a-z]+|xn-\\-[a-z0-9]+)\\.?$"}}},"required":["ipAddress","hostnames"],"additionalProperties":false},"description":"Entries to add to /etc/hosts"},"restrictions":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether or not to restrict the settings to resources with specific tags"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39},"description":"The tags which determine the resources the settings should be applied to"},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Projects > Manage > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","project"]},"v1-projects--projectId--get":{"operationId":"getProjectsProjectid","summary":"Get project","description":"Get information about the given project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the given project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project.","example":"default-project"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"The name of the project.","example":"Default Project"},"description":{"type":"string","description":"A short description of the project.","example":"The project description"},"deployment":{"type":"object","properties":{"region":{"type":"string","description":"The region where the project's services, jobs and addons are deployed in.","example":"europe-west"}},"required":["region"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the project was created.","example":"2021-01-20T11:19:53.175Z"},"services":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the service.","example":"example-service"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"stageId":{"type":"string","description":"ID of the environment the resource belongs to.","example":"staging"},"name":{"type":"string","description":"The name of the service.","example":"Example Service"},"description":{"type":"string","description":"A short description of the service.","example":"This is the service description"},"serviceType":{"type":"string","enum":["combined","build","deployment"],"description":"Type of the service (combined, build or deployment)","example":"combined"}},"required":["id","uid","appId","name","serviceType"],"additionalProperties":false,"description":"A service object."},"description":"An array of services belonging to the project."},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the project has a custom registry.","example":false},"configuration":{"type":"object","properties":{"credentialId":{"type":"string"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"additionalProperties":false,"description":"The configuration of the custom registry."}},"required":["enabled"],"additionalProperties":false},"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the job.","example":"example-job"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-job"},"stageId":{"type":"string","description":"ID of the environment the resource belongs to.","example":"staging"},"name":{"type":"string","description":"The name of the job.","example":"Example Job"},"description":{"type":"string","description":"A short description of the job.","example":"This is the job description"},"jobType":{"type":"string","enum":["manual","cron"],"description":"Type of the job (manual or cron)","example":"cron"}},"required":["id","uid","appId","name","jobType"],"additionalProperties":false,"description":"A job object."},"description":"An array of jobs belonging to the project."},"addons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"stageId":{"type":"string","description":"ID of the environment the resource belongs to.","example":"staging"},"name":{"type":"string","description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","description":"A short description of the addon.","example":"This is the addon description"},"spec":{"type":"object","properties":{"type":{"type":"string","description":"The type of the addon","example":"mongodb"}},"required":["type"],"additionalProperties":false,"description":"Details about the addon's specifications."}},"required":["id","uid","appId","name","spec"],"additionalProperties":false,"description":"An addon object."},"description":"An array of addons belonging to the project."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"}},"required":["id","uid","name","deployment","createdAt","services","jobs","addons","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","project"]},"v1-projects--projectId--get-team-scoped":{"operationId":"getProjectsProjectid","summary":"Get project","description":"Get information about the given project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the given project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the project.","example":"default-project"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"The name of the project.","example":"Default Project"},"description":{"type":"string","description":"A short description of the project.","example":"The project description"},"deployment":{"type":"object","properties":{"region":{"type":"string","description":"The region where the project's services, jobs and addons are deployed in.","example":"europe-west"}},"required":["region"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"The time the project was created.","example":"2021-01-20T11:19:53.175Z"},"services":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the service.","example":"example-service"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"stageId":{"type":"string","description":"ID of the environment the resource belongs to.","example":"staging"},"name":{"type":"string","description":"The name of the service.","example":"Example Service"},"description":{"type":"string","description":"A short description of the service.","example":"This is the service description"},"serviceType":{"type":"string","enum":["combined","build","deployment"],"description":"Type of the service (combined, build or deployment)","example":"combined"}},"required":["id","uid","appId","name","serviceType"],"additionalProperties":false,"description":"A service object."},"description":"An array of services belonging to the project."},"customRegistry":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether the project has a custom registry.","example":false},"configuration":{"type":"object","properties":{"credentialId":{"type":"string"},"provider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"]}},"additionalProperties":false,"description":"The configuration of the custom registry."}},"required":["enabled"],"additionalProperties":false},"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the job.","example":"example-job"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-job"},"stageId":{"type":"string","description":"ID of the environment the resource belongs to.","example":"staging"},"name":{"type":"string","description":"The name of the job.","example":"Example Job"},"description":{"type":"string","description":"A short description of the job.","example":"This is the job description"},"jobType":{"type":"string","enum":["manual","cron"],"description":"Type of the job (manual or cron)","example":"cron"}},"required":["id","uid","appId","name","jobType"],"additionalProperties":false,"description":"A job object."},"description":"An array of jobs belonging to the project."},"addons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"stageId":{"type":"string","description":"ID of the environment the resource belongs to.","example":"staging"},"name":{"type":"string","description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","description":"A short description of the addon.","example":"This is the addon description"},"spec":{"type":"object","properties":{"type":{"type":"string","description":"The type of the addon","example":"mongodb"}},"required":["type"],"additionalProperties":false,"description":"Details about the addon's specifications."}},"required":["id","uid","appId","name","spec"],"additionalProperties":false,"description":"An addon object."},"description":"An array of addons belonging to the project."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"}},"required":["id","uid","name","deployment","createdAt","services","jobs","addons","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Projects","team"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","project"]},"v1-projects--projectId--delete":{"operationId":"deleteProjectsProjectid","summary":"Delete project","description":"Delete the given project. Fails if the project isn't empty.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"delete_child_objects","type":"boolean","description":"If true, resources belonging to this project will be deleted. Otherwise, an error will be returned if the project is not empty.","example":false,"default":false,"in":"query","schema":{"name":"delete_child_objects","type":"boolean","description":"If true, resources belonging to this project will be deleted. Otherwise, an error will be returned if the project is not empty.","example":false,"default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The project couldn't be deleted as it has dependencies that have not been deleted"}},"tags":["Projects"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","project"]},"v1-projects--projectId--delete-team-scoped":{"operationId":"deleteProjectsProjectid","summary":"Delete project","description":"Delete the given project. Fails if the project isn't empty.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"delete_child_objects","type":"boolean","description":"If true, resources belonging to this project will be deleted. Otherwise, an error will be returned if the project is not empty.","example":false,"default":false,"in":"query","schema":{"name":"delete_child_objects","type":"boolean","description":"If true, resources belonging to this project will be deleted. Otherwise, an error will be returned if the project is not empty.","example":false,"default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The project couldn't be deleted as it has dependencies that have not been deleted"}},"tags":["Projects","team"],"security":[],"x-nf-permission-required":"Project > Projects > Manage > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","project"]},"v1-projects--projectId--addons-get":{"operationId":"getProjectsAddons","summary":"List addons","description":"Gets a list of addons belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of addons belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"addons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Addon name.","example":"Example Addon"},"appId":{"type":"string","description":"Full identifier for the addon.","example":"/example-user/default-project/example-job"},"stageId":{"type":"string","description":"ID of the environment the addon belongs to.","example":"staging"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the addon.","example":"This is the addon description"},"spec":{"type":"object","properties":{"type":{"type":"string","description":"The type of the addon","example":"mongodb"}},"required":["type"],"additionalProperties":false,"description":"Details about the addon's specifications."},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"}},"required":["id","uid","name","appId","tags","spec","status"],"additionalProperties":false,"description":"Information about an addon."},"description":"An array of addons."}},"required":["addons"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","addons"]},"v1-projects--projectId--addons-get-team-scoped":{"operationId":"getProjectsAddons","summary":"List addons","description":"Gets a list of addons belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of addons belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"addons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Addon name.","example":"Example Addon"},"appId":{"type":"string","description":"Full identifier for the addon.","example":"/example-user/default-project/example-job"},"stageId":{"type":"string","description":"ID of the environment the addon belongs to.","example":"staging"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the addon.","example":"This is the addon description"},"spec":{"type":"object","properties":{"type":{"type":"string","description":"The type of the addon","example":"mongodb"}},"required":["type"],"additionalProperties":false,"description":"Details about the addon's specifications."},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"}},"required":["id","uid","name","appId","tags","spec","status"],"additionalProperties":false,"description":"Information about an addon."},"description":"An array of addons."}},"required":["addons"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","addons"]},"v1-projects--projectId--addons-post":{"operationId":"postProjectsAddons","summary":"Create addon","description":"Creates a new addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created addon.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","version","billing","id","appId","status","cluster"],"additionalProperties":false,"description":"Native Northflank addons"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank managed bucket addon"}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."}},"required":["name","type","version","billing"],"additionalProperties":false,"description":"Native Northflank addons","x-required":true},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine","x-required":true},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank managed bucket addon","x-required":true}],"description":"The provisioner type of the addon"}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","addon"]},"v1-projects--projectId--addons-post-team-scoped":{"operationId":"postProjectsAddons","summary":"Create addon","description":"Creates a new addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created addon.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","version","billing","id","appId","status","cluster"],"additionalProperties":false,"description":"Native Northflank addons"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank managed bucket addon"}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."}},"required":["name","type","version","billing"],"additionalProperties":false,"description":"Native Northflank addons","x-required":true},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine","x-required":true},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank managed bucket addon","x-required":true}],"description":"The provisioner type of the addon"}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","addon"]},"v1-projects--projectId--addons-put":{"operationId":"putProjectsAddons","summary":"Put addon","description":"Creates or updates an addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated addon.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","version","billing","id","appId","status","cluster"],"additionalProperties":false,"description":"Native Northflank addons"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank managed bucket addon"}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type)."},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type)."},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`."},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler instances in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."}},"required":["name","type","version","billing"],"additionalProperties":false,"description":"Native Northflank addon"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank managed object storage addon"}],"description":"The provisioner type of the addon"}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","addon"]},"v1-projects--projectId--addons-put-team-scoped":{"operationId":"putProjectsAddons","summary":"Put addon","description":"Creates or updates an addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated addon.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","version","billing","id","appId","status","cluster"],"additionalProperties":false,"description":"Native Northflank addons"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank managed bucket addon"}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type)."},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type)."},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`."},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler instances in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."}},"required":["name","type","version","billing"],"additionalProperties":false,"description":"Native Northflank addon"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of parent project","example":"example-project"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"}},"required":["name","type"],"additionalProperties":false,"description":"Northflank managed object storage addon"}],"description":"The provisioner type of the addon"}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","addon"]},"v1-projects--projectId--addons--addonId--get":{"operationId":"getProjectsAddonsAddonid","summary":"Get addon","description":"Gets information about the given addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Addon name.","example":"Example Addon"},"appId":{"type":"string","description":"Full identifier for the addon.","example":"/example-user/default-project/example-addon"},"stageId":{"type":"string","description":"ID of the environment the addon belongs to.","example":"staging"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the addon.","example":"This is the addon description"},"createdAt":{"type":"string","format":"date-time","description":"The time the addon was created.","example":"2021-01-20T11:19:53.175Z"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"spec":{"type":"object","properties":{"type":{"type":"string","description":"The type of the addon","example":"mongodb"},"config":{"oneOf":[{"type":"object","properties":{"versionTag":{"type":"string","description":"The version of the addon running.","example":"4.2.14"},"lifecycleStatus":{"type":"string","enum":["active","deprecated","discontinued"],"description":"The support status of the current addon version.","example":"active"},"deployment":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"description":"The number of replicas running for this addon.","example":1},"storageClass":{"type":"string","description":"The type of storage used by the addon.","example":"nvme"},"storageSize":{"type":"number","format":"float","description":"The size of the addon storage, in MB.","example":6144},"planId":{"type":"string","description":"The deployment plan used by the addon.","example":"nf-compute-20"},"region":{"type":"string","description":"The region where the addon is deployed.","example":"europe-west"}},"required":["replicas","storageClass","storageSize","planId","region"],"additionalProperties":false,"description":"Details about the addon deployment."},"networking":{"type":"object","properties":{"tlsEnabled":{"type":"boolean","description":"Whether this addon is provisioned with a TLS certificate.","example":true},"externalAccessEnabled":{"type":"boolean","description":"Whether this addon is publicly accessible via the internet.","example":true},"vpcAccessible":{"type":"boolean","description":"Whether this addon is exposed on the cluster's private (VPC) load balancer.","example":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"An IP address used by this rule.","example":"127.0.0.1"},"action":{"type":"string","enum":["DENY","ALLOW"],"description":"The action for this rule.","example":"ALLOW"}},"required":["address","action"],"additionalProperties":false,"description":"Data about an IP policy rule."},"description":"An array of IP policy rules."}},"required":["tlsEnabled","externalAccessEnabled"],"additionalProperties":false,"description":"Details about the addon networking settings."},"typeSpecificSettings":{"type":"object","properties":{"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Whether Supabase mode is enabled (loads supabase extensions and supautils). Set at creation, cannot be changed afterwards.","example":true},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Whether EDB mode is enabled (loads the EDB extension set). Set at creation, cannot be changed afterwards.","example":true}},"additionalProperties":false,"description":"Type-specific settings. Only present when at least one setting is set."},"secretRotation":{"type":"object","properties":{"startedAt":{"type":"string","format":"date-time","description":"The time the secret rotation was started.","example":"2026-01-20T11:19:53.175Z"},"completedAt":{"type":"string","format":"date-time","description":"The time the secret rotation reached a terminal state.","example":"2026-01-20T11:24:02.881Z"},"inProgress":{"type":"boolean","description":"Whether the new credentials have been applied. Old credentials stay valid until finalised."},"status":{"type":"string","enum":["scheduled","rotating","rotated","finalising","completed","failed","finalise-failed"],"description":"The current status of the secret rotation.","example":"rotated"},"reason":{"type":"string","enum":["user","restore","fork-auto-finalise"],"description":"What triggered the rotation. Defaults to a user-triggered rotate.","example":"user"}},"additionalProperties":false,"description":"Status of an in-progress secret rotation, if any."}},"required":["versionTag","lifecycleStatus","deployment","networking"],"additionalProperties":false,"description":"Details about the config of the Northflank-managed addon."},{"type":"object","properties":{"templateValues":{"type":"string","description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"required":["templateValues"],"additionalProperties":false,"description":"Details about the config of the custom addon."},{"type":"object","properties":{"region":{"type":"string","description":"The region where the bucket is provisioned.","example":"eu-west-2"}},"additionalProperties":false,"description":"Details about the config of the managed bucket addon."}],"description":"Details about the addon configuration."},"pendingActions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Type of the pending action","example":"backup"},"createdAt":{"type":"string","format":"date-time","description":"ISO timestamp of when the action was triggered","example":"2026-03-13T15:50:56.219Z"}},"additionalProperties":false},"description":"List of actions which are queued to be processed on this addon."}},"required":["type","config","pendingActions"],"additionalProperties":false,"description":"Details about the addon's specifications."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"}},"required":["id","uid","name","appId","tags","createdAt","status","spec","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon"]},"v1-projects--projectId--addons--addonId--get-team-scoped":{"operationId":"getProjectsAddonsAddonid","summary":"Get addon","description":"Gets information about the given addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Addon name.","example":"Example Addon"},"appId":{"type":"string","description":"Full identifier for the addon.","example":"/example-user/default-project/example-addon"},"stageId":{"type":"string","description":"ID of the environment the addon belongs to.","example":"staging"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the addon.","example":"This is the addon description"},"createdAt":{"type":"string","format":"date-time","description":"The time the addon was created.","example":"2021-01-20T11:19:53.175Z"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"spec":{"type":"object","properties":{"type":{"type":"string","description":"The type of the addon","example":"mongodb"},"config":{"oneOf":[{"type":"object","properties":{"versionTag":{"type":"string","description":"The version of the addon running.","example":"4.2.14"},"lifecycleStatus":{"type":"string","enum":["active","deprecated","discontinued"],"description":"The support status of the current addon version.","example":"active"},"deployment":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"description":"The number of replicas running for this addon.","example":1},"storageClass":{"type":"string","description":"The type of storage used by the addon.","example":"nvme"},"storageSize":{"type":"number","format":"float","description":"The size of the addon storage, in MB.","example":6144},"planId":{"type":"string","description":"The deployment plan used by the addon.","example":"nf-compute-20"},"region":{"type":"string","description":"The region where the addon is deployed.","example":"europe-west"}},"required":["replicas","storageClass","storageSize","planId","region"],"additionalProperties":false,"description":"Details about the addon deployment."},"networking":{"type":"object","properties":{"tlsEnabled":{"type":"boolean","description":"Whether this addon is provisioned with a TLS certificate.","example":true},"externalAccessEnabled":{"type":"boolean","description":"Whether this addon is publicly accessible via the internet.","example":true},"vpcAccessible":{"type":"boolean","description":"Whether this addon is exposed on the cluster's private (VPC) load balancer.","example":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"An IP address used by this rule.","example":"127.0.0.1"},"action":{"type":"string","enum":["DENY","ALLOW"],"description":"The action for this rule.","example":"ALLOW"}},"required":["address","action"],"additionalProperties":false,"description":"Data about an IP policy rule."},"description":"An array of IP policy rules."}},"required":["tlsEnabled","externalAccessEnabled"],"additionalProperties":false,"description":"Details about the addon networking settings."},"typeSpecificSettings":{"type":"object","properties":{"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Whether Supabase mode is enabled (loads supabase extensions and supautils). Set at creation, cannot be changed afterwards.","example":true},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Whether EDB mode is enabled (loads the EDB extension set). Set at creation, cannot be changed afterwards.","example":true}},"additionalProperties":false,"description":"Type-specific settings. Only present when at least one setting is set."},"secretRotation":{"type":"object","properties":{"startedAt":{"type":"string","format":"date-time","description":"The time the secret rotation was started.","example":"2026-01-20T11:19:53.175Z"},"completedAt":{"type":"string","format":"date-time","description":"The time the secret rotation reached a terminal state.","example":"2026-01-20T11:24:02.881Z"},"inProgress":{"type":"boolean","description":"Whether the new credentials have been applied. Old credentials stay valid until finalised."},"status":{"type":"string","enum":["scheduled","rotating","rotated","finalising","completed","failed","finalise-failed"],"description":"The current status of the secret rotation.","example":"rotated"},"reason":{"type":"string","enum":["user","restore","fork-auto-finalise"],"description":"What triggered the rotation. Defaults to a user-triggered rotate.","example":"user"}},"additionalProperties":false,"description":"Status of an in-progress secret rotation, if any."}},"required":["versionTag","lifecycleStatus","deployment","networking"],"additionalProperties":false,"description":"Details about the config of the Northflank-managed addon."},{"type":"object","properties":{"templateValues":{"type":"string","description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"required":["templateValues"],"additionalProperties":false,"description":"Details about the config of the custom addon."},{"type":"object","properties":{"region":{"type":"string","description":"The region where the bucket is provisioned.","example":"eu-west-2"}},"additionalProperties":false,"description":"Details about the config of the managed bucket addon."}],"description":"Details about the addon configuration."},"pendingActions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Type of the pending action","example":"backup"},"createdAt":{"type":"string","format":"date-time","description":"ISO timestamp of when the action was triggered","example":"2026-03-13T15:50:56.219Z"}},"additionalProperties":false},"description":"List of actions which are queued to be processed on this addon."}},"required":["type","config","pendingActions"],"additionalProperties":false,"description":"Details about the addon's specifications."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"}},"required":["id","uid","name","appId","tags","createdAt","status","spec","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon"]},"v1-projects--projectId--addons--addonId--patch":{"operationId":"patchProjectsAddonsAddonid","summary":"Patch addon","description":"Updates an addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the updated addon.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","version","billing","id","appId","status","cluster"],"additionalProperties":false,"description":"Native Northflank addons"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank managed bucket addon"}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"additionalProperties":false},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type)."},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type)."},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`."},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler instances in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."}},"additionalProperties":false,"description":"Native Northflank addon"},{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."}},"additionalProperties":false,"description":"Northflank managed object storage addon"}],"description":"The provisioner type of the addon"}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","addon"]},"v1-projects--projectId--addons--addonId--patch-team-scoped":{"operationId":"patchProjectsAddonsAddonid","summary":"Patch addon","description":"Updates an addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the updated addon.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme","default":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["required","disabled"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"required":["deploymentPlan","storage","replicas"],"additionalProperties":false},"source":{"oneOf":[{"type":"object","properties":{"projectId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the project of the source addon. Only required if not the same as target addon","example":"existing-project"},"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the addon to fork.","example":"existing-addon"},"backupId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of a backup belonging to that addon to use for the fork.","example":"existing-backup"},"backupType":{"type":"string","enum":["snapshot","global"],"description":"Type of backup to select when backupId is `latest`. Defaults to `snapshot`.","example":"snapshot"}},"required":["addonId","backupId"],"additionalProperties":false,"description":"Optional object containing data about an existing addon to fork. If provided, the addon will be created from that existing addon backup."},{"type":"object","properties":{"backupUid":{"type":"string","format":"uuid","description":"Uid of the backup","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["backupUid"],"additionalProperties":false,"description":"Optional object containing the reference to a backup addressed by its UUID"}],"description":"Fork source backup for the addon"},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type).","default":false},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type).","default":false},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`.","default":false},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler replicas in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"customCredentials":{"type":"object","properties":{"dbName":{"type":"string","description":"Custom database name. Not supported for all addon types."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","version","billing","id","appId","status","cluster"],"additionalProperties":false,"description":"Native Northflank addons"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the addon.","example":"Example Addon"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","description":"The identifier for the type of addon. Addon types can be found at the Get Addon Types endpoint.","example":"postgresql"},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"region":{"type":"string","description":"The AWS region identifier for the bucket location.","example":"eu-west-2"},"id":{"type":"string","description":"Identifier for the addon.","example":"example-addon"},"appId":{"type":"string","description":"Full identifier used for deployment","example":"/example-user/default-project/example-addon"},"status":{"type":"string","enum":["preDeployment","triggerAllocation","allocating","postDeployment","running","paused","scaling","upgrading","resetting","backup","restore","failed","error","errorAllocating","deleting","deleted"],"description":"The current state of the addon.","example":"running"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id","appId","status","cluster"],"additionalProperties":false,"description":"Northflank managed bucket addon"}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"version":{"type":"string","description":"The version of the addon type to use. If set to `latest`, the addon will be created with the most recent addon version. If set to a major version appended with `-latest`, e.g. e.g. `14-latest` or `14.5-latest`, the addon will be created with the most recent minor/patch version belonging to that major version.","example":"latest"},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of storage. Only configurable if the relevant feature flag is enabled for you account","example":"nvme"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":6144},"replicas":{"type":"integer","minimum":1,"description":"The number of addon replicas to run.","example":1},"diskAutoscaling":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable automatic disk scaling when usage exceeds the configured threshold."},"thresholdPercent":{"type":"number","format":"float","enum":[75,90],"description":"Disk usage percentage that triggers a resize. Defaults to 90.","default":90},"maxSizeMib":{"type":"integer","minimum":1,"description":"Maximum disk size in mebibytes. When set, autoscaling will not expand storage beyond this value. Must be greater than the current storage size."}},"required":["enabled"],"additionalProperties":false,"description":"Automatic disk scaling configuration."}},"additionalProperties":false},"tlsEnabled":{"type":"boolean","description":"Enables access to the addon via TLS (if supported by the addon type)."},"externalAccessEnabled":{"type":"boolean","description":"Enables external access to the addon via TLS (if supported by the addon type)."},"vpcAccessible":{"type":"boolean","description":"Exposes the addon on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`."},"ipPolicies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"typeSpecificSettings":{"type":"object","properties":{"redisMaxMemoryPolicy":{"type":"string","enum":["noeviction","allkeys-lru","allkeys-lfu","volatile-lru","volatile-lfu","allkeys-random","volatile-random","volatile-ttl","volatile-lrm","allkeys-lrm"],"description":"Redis only: Key eviction policy at memory pressure."},"redisSentinelEnabled":{"type":"boolean","description":"Redis only: Deploy Redis with Sentinel high availability. Default: false"},"postgresqlWalLevel":{"type":"string","enum":["replica","logical"],"description":"PostgreSQL only: Configure wal_level setting."},"postgresqlSupabaseMode":{"type":"boolean","description":"PostgreSQL only: Enable Supabase mode (additional extensions and event trigger creation support). Cannot be changed after creation."},"postgresqlEdbMode":{"type":"boolean","description":"PostgreSQL only: Enable EDB mode (EDB extension set: edb_stat_monitor, query_advisor, edb_pg_tuner, aidb, pgaa and others). Requires PostgreSQL 18 or newer. Cannot be changed after creation."},"postgresqlConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of postgres instance."},"postgresqlConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of connection pooler instances in case connection pooler is enabled."},"postgresqlReadConnectionPoolerEnabled":{"type":"boolean","description":"PostgreSQL only: Run connection pooler in front of read-only postgres instance."},"postgresqlReadConnectionPoolerReplicas":{"type":"integer","minimum":1,"maximum":3,"description":"PostgreSQL only: Number of read-only connection pooler replicas in case read-only connection pooler is enabled."},"postgresqlImportMode":{"type":"boolean","description":"PostgreSQL only: Configure PostgreSQL for higher import speed. Not recommended for production workloads."},"mysqlHaModeEnabled":{"type":"boolean","description":"MySQL only: Run MySQL in HA configuration with auto-failover and connection poolers."},"mysqlHaRouterEnabled":{"type":"boolean","description":"MySQL HA only: Run connection routers in front of MySQL instances."},"mysqlRouterReplicas":{"type":"integer","minimum":1,"maximum":6,"description":"MysqlHA only: Number of connection router replicas in case connection router is enabled."}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."}},"additionalProperties":false,"description":"Native Northflank addon"},{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"templateValues":{"type":"object","properties":{},"additionalProperties":false,"description":"The template values to be passed to the templating engine.","example":"{\"replicas\": 2}"}},"additionalProperties":false,"description":"Northflank bring your own addon with templating engine"},{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the addon.","example":"An addon description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."}},"additionalProperties":false,"description":"Northflank managed object storage addon"}],"description":"The provisioner type of the addon"}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","addon"]},"v1-projects--projectId--addons--addonId--delete":{"operationId":"deleteProjectsAddonsAddonid","summary":"Delete addon","description":"Deletes the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","addon"]},"v1-projects--projectId--addons--addonId--delete-team-scoped":{"operationId":"deleteProjectsAddonsAddonid","summary":"Delete addon","description":"Deletes the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","addon"]},"v1-projects--projectId--addons--addonId--backup-schedules-get":{"operationId":"getProjectsAddonsAddonidBackupSchedules","summary":"Get addon backup schedules","description":"Gets details about an addon's backup schedules","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the given addon's backup schedules.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"schedules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of backup being performed.","example":"snapshot"},"backupCompressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom backup destination in which the dump back up should be stored.","example":"example-backup-destination"},"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Information about the scheduling for the backup schedule."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was created.","example":"2022-07-11T13:08:09.626Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was last updated.","example":"2022-07-11T13:08:09.626Z"}},"required":["id","backupType","scheduling","retentionTime","createdAt","updatedAt"],"additionalProperties":false}}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup-schedules"]},"v1-projects--projectId--addons--addonId--backup-schedules-get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackupSchedules","summary":"Get addon backup schedules","description":"Gets details about an addon's backup schedules","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the given addon's backup schedules.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"schedules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of backup being performed.","example":"snapshot"},"backupCompressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom backup destination in which the dump back up should be stored.","example":"example-backup-destination"},"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Information about the scheduling for the backup schedule."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was created.","example":"2022-07-11T13:08:09.626Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was last updated.","example":"2022-07-11T13:08:09.626Z"}},"required":["id","backupType","scheduling","retentionTime","createdAt","updatedAt"],"additionalProperties":false}}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup-schedules"]},"v1-projects--projectId--addons--addonId--backup-schedules-post":{"operationId":"postProjectsAddonsAddonidBackupSchedules","summary":"Create addon backup schedule","description":"Create a new backup schedule for an addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the created backup schedule.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["create","addon","backup-schedule"]},"v1-projects--projectId--addons--addonId--backup-schedules-post-team-scoped":{"operationId":"postProjectsAddonsAddonidBackupSchedules","summary":"Create addon backup schedule","description":"Create a new backup schedule for an addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the created backup schedule.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of the backup to be performed.","example":"snapshot"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","backupType","retentionTime"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["create","addon","backup-schedule"]},"v1-projects--projectId--addons--addonId--backup-schedules--scheduleId--delete":{"operationId":"deleteProjectsAddonsAddonidBackupSchedulesScheduleid","summary":"Delete addon backup schedule","description":"Deletes a backup schedule for an addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path","schema":{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","addon","backup-schedule"]},"v1-projects--projectId--addons--addonId--backup-schedules--scheduleId--delete-team-scoped":{"operationId":"deleteProjectsAddonsAddonidBackupSchedulesScheduleid","summary":"Delete addon backup schedule","description":"Deletes a backup schedule for an addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path","schema":{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","addon","backup-schedule"]},"v1-projects--projectId--addons--addonId--backups-get":{"operationId":"getProjectsAddonsAddonidBackups","summary":"List addon backups","description":"Returns a list of backups for the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of backups for the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"backups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"uid":{"type":"string","description":"The unique id of the backup.","example":"88283b31-06f3-4857-b75f-f807bd7a52af"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"},"config":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["fileUpload","liveInstance","snapshot","externalDump","sameAddon"],"description":"The type of backup.","example":"snapshot"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. If the backup type is `snapshot`, the addon will be restored to this version when the backup is restored.","example":"4.4.8"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom backup destination in which the dump back up should be stored.","example":"example-backup-destination"}},"required":["id","name","uid","status","createdAt","completedAt","config"],"additionalProperties":false,"description":"Data about a backup."},"description":"A list of backups for the given addon."}},"required":["backups"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backups"]},"v1-projects--projectId--addons--addonId--backups-get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackups","summary":"List addon backups","description":"Returns a list of backups for the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of backups for the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"backups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"uid":{"type":"string","description":"The unique id of the backup.","example":"88283b31-06f3-4857-b75f-f807bd7a52af"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"},"config":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["fileUpload","liveInstance","snapshot","externalDump","sameAddon"],"description":"The type of backup.","example":"snapshot"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. If the backup type is `snapshot`, the addon will be restored to this version when the backup is restored.","example":"4.4.8"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom backup destination in which the dump back up should be stored.","example":"example-backup-destination"}},"required":["id","name","uid","status","createdAt","completedAt","config"],"additionalProperties":false,"description":"Data about a backup."},"description":"A list of backups for the given addon."}},"required":["backups"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backups"]},"v1-projects--projectId--addons--addonId--backups-post":{"operationId":"postProjectsAddonsAddonidBackups","summary":"Backup addon","description":"Initiates a backup for the given addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the newly created backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"uid":{"type":"string","description":"The unique id of the backup.","example":"88283b31-06f3-4857-b75f-f807bd7a52af"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"},"config":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["fileUpload","liveInstance","snapshot","externalDump","sameAddon"],"description":"The type of backup.","example":"snapshot"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"},"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. If the backup type is `snapshot`, the addon will be restored to this version when the backup is restored.","example":"4.4.8"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"lastRestore":{"type":"object","properties":{"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the restore.","example":"completed"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["restoreTimestamp","status"],"additionalProperties":false,"description":"Details about the most recent restore of this backup."}},"required":["id","name","uid","status","createdAt","config"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s|\\/|:)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":39,"description":"The name of the backup. If not provided, a default name will be generated containing the current date.","example":"Example Backup"},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of backup to perform. Defaults to `snapshot`.","example":"snapshot","default":"snapshot"},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom destination to store the backup in. Only applicable for dump backups. If not specified, backup is stored in Northflank-managed destination."},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should additionally be created. Only applicable for snapshot backups."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["backup","addon"]},"v1-projects--projectId--addons--addonId--backups-post-team-scoped":{"operationId":"postProjectsAddonsAddonidBackups","summary":"Backup addon","description":"Initiates a backup for the given addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the newly created backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"uid":{"type":"string","description":"The unique id of the backup.","example":"88283b31-06f3-4857-b75f-f807bd7a52af"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"},"config":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["fileUpload","liveInstance","snapshot","externalDump","sameAddon"],"description":"The type of backup.","example":"snapshot"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"},"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. If the backup type is `snapshot`, the addon will be restored to this version when the backup is restored.","example":"4.4.8"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"lastRestore":{"type":"object","properties":{"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the restore.","example":"completed"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["restoreTimestamp","status"],"additionalProperties":false,"description":"Details about the most recent restore of this backup."}},"required":["id","name","uid","status","createdAt","config"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s|\\/|:)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":39,"description":"The name of the backup. If not provided, a default name will be generated containing the current date.","example":"Example Backup"},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of backup to perform. Defaults to `snapshot`.","example":"snapshot","default":"snapshot"},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom destination to store the backup in. Only applicable for dump backups. If not specified, backup is stored in Northflank-managed destination."},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should additionally be created. Only applicable for snapshot backups."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["backup","addon"]},"v1-projects--projectId--addons--addonId--backups--backupId--get":{"operationId":"getProjectsAddonsAddonidBackupsBackupid","summary":"Get addon backup","description":"Gets details about a given backup.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"Details about the given backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"uid":{"type":"string","description":"The unique id of the backup.","example":"88283b31-06f3-4857-b75f-f807bd7a52af"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"},"config":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["fileUpload","liveInstance","snapshot","externalDump","sameAddon"],"description":"The type of backup.","example":"snapshot"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"},"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. If the backup type is `snapshot`, the addon will be restored to this version when the backup is restored.","example":"4.4.8"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"lastRestore":{"type":"object","properties":{"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the restore.","example":"completed"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["restoreTimestamp","status"],"additionalProperties":false,"description":"Details about the most recent restore of this backup."}},"required":["id","name","uid","status","createdAt","config"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackupsBackupid","summary":"Get addon backup","description":"Gets details about a given backup.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"Details about the given backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"example-backup"},"name":{"type":"string","description":"The name of the backup.","example":"Example Backup"},"uid":{"type":"string","description":"The unique id of the backup.","example":"88283b31-06f3-4857-b75f-f807bd7a52af"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"createdAt":{"type":"string","description":"The time the backup was initiated.","example":"2021-01-20T11:19:53.175Z"},"completedAt":{"type":"string","description":"The time the backup was completed.","example":"2021-01-20T11:19:54.494Z"},"config":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["fileUpload","liveInstance","snapshot","externalDump","sameAddon"],"description":"The type of backup.","example":"snapshot"}},"additionalProperties":false,"description":"Data about the source of the backup."},"size":{"type":"string","description":"The size of the backup, in bytes","example":"1234"},"addonVersion":{"type":"string","description":"The version of the addon at the time of the backup. If the backup type is `snapshot`, the addon will be restored to this version when the backup is restored.","example":"4.4.8"}},"required":["size"],"additionalProperties":false,"description":"Data about the backup configuration."},"lastRestore":{"type":"object","properties":{"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the restore.","example":"completed"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["restoreTimestamp","status"],"additionalProperties":false,"description":"Details about the most recent restore of this backup."}},"required":["id","name","uid","status","createdAt","config"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--delete":{"operationId":"deleteProjectsAddonsAddonidBackupsBackupid","summary":"Delete addon backup","description":"Deletes a given backup","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--delete-team-scoped":{"operationId":"deleteProjectsAddonsAddonidBackupsBackupid","summary":"Delete addon backup","description":"Deletes a given backup","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["delete","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--abort-post":{"operationId":"postProjectsAddonsAddonidBackupsBackupidAbort","summary":"Abort backup","description":"Aborts the in progress backup.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--abort-post-team-scoped":{"operationId":"postProjectsAddonsAddonidBackupsBackupidAbort","summary":"Abort backup","description":"Aborts the in progress backup.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--abort-restore-post":{"operationId":"postProjectsAddonsAddonidBackupsBackupidAbortRestore","summary":"Abort backup restore","description":"Aborts an in-progress backup restore.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}},{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query","schema":{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query"}},{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query","schema":{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"restoreId":{"type":"string","description":"ID of the restore to abort.","example":"66845073ce75649ad18635f0"}},"required":["restoreId"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","addon","restore"]},"v1-projects--projectId--addons--addonId--backups--backupId--abort-restore-post-team-scoped":{"operationId":"postProjectsAddonsAddonidBackupsBackupidAbortRestore","summary":"Abort backup restore","description":"Aborts an in-progress backup restore.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}},{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query","schema":{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query"}},{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query","schema":{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"restoreId":{"type":"string","description":"ID of the restore to abort.","example":"66845073ce75649ad18635f0"}},"required":["restoreId"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","addon","restore"]},"v1-projects--projectId--addons--addonId--backups--backupId--download-link-get":{"operationId":"getProjectsAddonsAddonidBackupsBackupidDownloadLink","summary":"Get backup download link","description":"Generates a temporary download link for downloading the given backup.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"A download link to the given backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"downloadLink":{"type":"string","description":"The url to download the backup from.","example":"https://storage.googleapis.com/..."}},"required":["downloadLink"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup","download"]},"v1-projects--projectId--addons--addonId--backups--backupId--download-link-get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackupsBackupidDownloadLink","summary":"Get backup download link","description":"Generates a temporary download link for downloading the given backup.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"A download link to the given backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"downloadLink":{"type":"string","description":"The url to download the backup from.","example":"https://storage.googleapis.com/..."}},"required":["downloadLink"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup","download"]},"v1-projects--projectId--addons--addonId--backups--backupId--logs-get":{"operationId":"getProjectsAddonsAddonidBackupsBackupidLogs","summary":"Get addon backup logs","description":"Get logs for an addon backup","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup","logs"]},"v1-projects--projectId--addons--addonId--backups--backupId--logs-get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackupsBackupidLogs","summary":"Get addon backup logs","description":"Get logs for an addon backup","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup","logs"]},"v1-projects--projectId--addons--addonId--backups--backupId--restore-post":{"operationId":"postProjectsAddonsAddonidBackupsBackupidRestore","summary":"Restore addon backup","description":"Restores the given addon to the given backup state.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}},{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query","schema":{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query"}},{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query","schema":{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query"}}],"responses":{"200":{"description":"Details about the backup restore.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"restoreId":{"type":"string","description":"The ID of the initiated restore.","example":"1611305397038"}},"required":["restoreId"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restore","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--restore-post-team-scoped":{"operationId":"postProjectsAddonsAddonidBackupsBackupidRestore","summary":"Restore addon backup","description":"Restores the given addon to the given backup state.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}},{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query","schema":{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query"}},{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query","schema":{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query"}}],"responses":{"200":{"description":"Details about the backup restore.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"restoreId":{"type":"string","description":"The ID of the initiated restore.","example":"1611305397038"}},"required":["restoreId"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restore","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--restores-get":{"operationId":"getProjectsAddonsAddonidBackupsBackupidRestores","summary":"List addon backup restores","description":"Gets a list of restores for the given backup.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query","schema":{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query"}},{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query","schema":{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query"}}],"responses":{"200":{"description":"A list of restores for the given backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"restores":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"668596c647fed81696a8a82c"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["id","status","restoreTimestamp"],"additionalProperties":false},"description":"A list of restores for the given backup."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup","restores"]},"v1-projects--projectId--addons--addonId--backups--backupId--restores-get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackupsBackupidRestores","summary":"List addon backup restores","description":"Gets a list of restores for the given backup.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query","schema":{"name":"sourceProjectId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source projectId when referring to a global backup.","in":"query"}},{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query","schema":{"name":"sourceAddonId","type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Specify the source addonId when referring to a global backup.","in":"query"}}],"responses":{"200":{"description":"A list of restores for the given backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"restores":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"668596c647fed81696a8a82c"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"}},"required":["id","status","restoreTimestamp"],"additionalProperties":false},"description":"A list of restores for the given backup."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","backup","restores"]},"v1-projects--projectId--addons--addonId--backups--backupId--restores--restoreId--logs-get":{"operationId":"getProjectsAddonsAddonidBackupsBackupidRestoresRestoreidLogs","summary":"Get addon restore logs","description":"Get logs for an addon restore","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path"}},{"name":"restoreId","type":"string","required":true,"description":"ID of the restore","example":"example-restore","in":"path","schema":{"name":"restoreId","type":"string","required":true,"description":"ID of the restore","example":"example-restore","in":"path"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","restore","logs"]},"v1-projects--projectId--addons--addonId--backups--backupId--restores--restoreId--logs-get-team-scoped":{"operationId":"getProjectsAddonsAddonidBackupsBackupidRestoresRestoreidLogs","summary":"Get addon restore logs","description":"Get logs for an addon restore","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup-123","in":"path"}},{"name":"restoreId","type":"string","required":true,"description":"ID of the restore","example":"example-restore","in":"path","schema":{"name":"restoreId","type":"string","required":true,"description":"ID of the restore","example":"example-restore","in":"path"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","restore","logs"]},"v1-projects--projectId--addons--addonId--backups--backupId--retain-post":{"operationId":"postProjectsAddonsAddonidBackupsBackupidRetain","summary":"Retain backup","description":"Flags a temporary backup generated by a backup schedule to be retained indefinitely rather than being deleted after the expiry date.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["retain","addon","backup"]},"v1-projects--projectId--addons--addonId--backups--backupId--retain-post-team-scoped":{"operationId":"postProjectsAddonsAddonidBackupsBackupidRetain","summary":"Retain backup","description":"Flags a temporary backup generated by a backup schedule to be retained indefinitely rather than being deleted after the expiry date.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["retain","addon","backup"]},"v1-projects--projectId--addons--addonId--containers-get":{"operationId":"getProjectsAddonsAddonidContainers","summary":"List addon containers","description":"Gets a list of containers for the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the addon's containers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the container.","example":"example-service-78b4d4459d-sbtn8"},"createdAt":{"type":"integer","minimum":1,"description":"The timestamp the container was created.","example":1611241087},"status":{"type":"string","enum":["TASK_RUNNING","TASK_STARTING","TASK_STAGING","TASK_KILLING","TASK_KILLED","TASK_FAILED","TASK_FINISHED"],"description":"The current status of the container.","example":"TASK_RUNNING"},"nodeName":{"type":"string","description":"BYOC only: the name of the node the container was scheduled to"},"nodePoolUserId":{"type":"string","description":"BYOC only: the user facing ID of the node pool that the container was scheduled to"},"nodePoolProviderId":{"type":"string","description":"BYOC only: the provider facing ID of the node pool that the container was scheduled to"},"host":{"type":"string","description":"BYOC only: the host address of the node the container was scheduled to"},"ipAddresses":{"type":"array","items":{"type":"string"},"description":"BYOC only: the IP addresses mapping to the container"},"updatedAt":{"type":"integer","minimum":1,"description":"The timestamp the container was last updated.","example":1611241087}},"required":["name","createdAt","status","updatedAt"],"additionalProperties":false,"description":"Data about a container."}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","containers"]},"v1-projects--projectId--addons--addonId--containers-get-team-scoped":{"operationId":"getProjectsAddonsAddonidContainers","summary":"List addon containers","description":"Gets a list of containers for the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the addon's containers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the container.","example":"example-service-78b4d4459d-sbtn8"},"createdAt":{"type":"integer","minimum":1,"description":"The timestamp the container was created.","example":1611241087},"status":{"type":"string","enum":["TASK_RUNNING","TASK_STARTING","TASK_STAGING","TASK_KILLING","TASK_KILLED","TASK_FAILED","TASK_FINISHED"],"description":"The current status of the container.","example":"TASK_RUNNING"},"nodeName":{"type":"string","description":"BYOC only: the name of the node the container was scheduled to"},"nodePoolUserId":{"type":"string","description":"BYOC only: the user facing ID of the node pool that the container was scheduled to"},"nodePoolProviderId":{"type":"string","description":"BYOC only: the provider facing ID of the node pool that the container was scheduled to"},"host":{"type":"string","description":"BYOC only: the host address of the node the container was scheduled to"},"ipAddresses":{"type":"array","items":{"type":"string"},"description":"BYOC only: the IP addresses mapping to the container"},"updatedAt":{"type":"integer","minimum":1,"description":"The timestamp the container was last updated.","example":1611241087}},"required":["name","createdAt","status","updatedAt"],"additionalProperties":false,"description":"Data about a container."}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","containers"]},"v1-projects--projectId--addons--addonId--credentials-get":{"operationId":"getProjectsAddonsAddonidCredentials","summary":"Get addon credentials","description":"Returns the credentials for connecting to the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Credentials for the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secrets":{"type":"object","properties":{},"description":"An object containing secrets for connecting to the addon. Secrets are dependent on the addon type.","example":{"username":"1720747439245d49","password":"f1ba286ee2465e80b0fd4af31276f3e33a"}},"envs":{"type":"object","properties":{},"description":"An object containing data such as connection strings. Dependent on the addon type.","example":{}}},"required":["secrets","envs"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","credentials"]},"v1-projects--projectId--addons--addonId--credentials-get-team-scoped":{"operationId":"getProjectsAddonsAddonidCredentials","summary":"Get addon credentials","description":"Returns the credentials for connecting to the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Credentials for the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secrets":{"type":"object","properties":{},"description":"An object containing secrets for connecting to the addon. Secrets are dependent on the addon type.","example":{"username":"1720747439245d49","password":"f1ba286ee2465e80b0fd4af31276f3e33a"}},"envs":{"type":"object","properties":{},"description":"An object containing data such as connection strings. Dependent on the addon type.","example":{}}},"required":["secrets","envs"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","credentials"]},"v1-projects--projectId--addons--addonId--import-post":{"operationId":"postProjectsAddonsAddonidImport","summary":"Import addon backup","description":"Imports a database from an external archive or existing live database.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s|\\/|:)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":39,"description":"The name of the backup. If not provided, a default name will be generated containing the current date.","example":"Example Backup"},"connectionString":{"type":"string","description":"A database connection string.","example":"mongodb://mongodb0.example.com:27017"},"importAllDatabases":{"type":"boolean","description":"Detect and import all databases. If false, attempts to import only the database specified in the connection string","default":true},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm for storing the imported file. Defaults to `gz`.","example":"gz"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom destination to store the imported backup in. If not specified, backup is stored in Northflank-managed destination."}},"required":["connectionString"],"additionalProperties":false,"description":"Import using a connection string. The database will be imported from the live database located at the connection string's location."},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s|\\/|:)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":39,"description":"The name of the backup. If not provided, a default name will be generated containing the current date.","example":"Example Backup"},"importUrl":{"type":"string","description":"A url pointing to an existing backup stored as a GNU zip (.gz) file.","example":"https://example.com/backup.db.gz"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom destination to store the imported backup in. If not specified, backup is stored in Northflank-managed destination."}},"required":["importUrl"],"additionalProperties":false,"description":"Import using an external archive. The database will be imported from an existing backup."}],"description":"Import type"},"examples":{"live":{"value":{"name":"Example Backup","connectionString":"mongodb://mongodb0.example.com:27017"},"description":"Import from a connection string"},"url":{"value":{"name":"Example Backup","importUrl":"https://example.com/backup.db.gz"},"description":"Import from a url"}}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import","addon","backup"]},"v1-projects--projectId--addons--addonId--import-post-team-scoped":{"operationId":"postProjectsAddonsAddonidImport","summary":"Import addon backup","description":"Imports a database from an external archive or existing live database.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s|\\/|:)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":39,"description":"The name of the backup. If not provided, a default name will be generated containing the current date.","example":"Example Backup"},"connectionString":{"type":"string","description":"A database connection string.","example":"mongodb://mongodb0.example.com:27017"},"importAllDatabases":{"type":"boolean","description":"Detect and import all databases. If false, attempts to import only the database specified in the connection string","default":true},"compressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm for storing the imported file. Defaults to `gz`.","example":"gz"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom destination to store the imported backup in. If not specified, backup is stored in Northflank-managed destination."}},"required":["connectionString"],"additionalProperties":false,"description":"Import using a connection string. The database will be imported from the live database located at the connection string's location."},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s|\\/|:)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":39,"description":"The name of the backup. If not provided, a default name will be generated containing the current date.","example":"Example Backup"},"importUrl":{"type":"string","description":"A url pointing to an existing backup stored as a GNU zip (.gz) file.","example":"https://example.com/backup.db.gz"},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom destination to store the imported backup in. If not specified, backup is stored in Northflank-managed destination."}},"required":["importUrl"],"additionalProperties":false,"description":"Import using an external archive. The database will be imported from an existing backup."}],"description":"Import type"},"examples":{"live":{"value":{"name":"Example Backup","connectionString":"mongodb://mongodb0.example.com:27017"},"description":"Import from a connection string"},"url":{"value":{"name":"Example Backup","importUrl":"https://example.com/backup.db.gz"},"description":"Import from a url"}}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import","addon","backup"]},"v1-projects--projectId--addons--addonId--logs-get":{"operationId":"getProjectsAddonsAddonidLogs","summary":"Get addon logs","description":"Get logs for an addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","logs"]},"v1-projects--projectId--addons--addonId--logs-get-team-scoped":{"operationId":"getProjectsAddonsAddonidLogs","summary":"Get addon logs","description":"Get logs for an addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","logs"]},"v1-projects--projectId--addons--addonId--metrics-get":{"operationId":"getProjectsAddonsAddonidMetrics","summary":"Get addon metrics","description":"Get metrics for an addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","addon","metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","addon","metrics"]}],"x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","metrics"]},"v1-projects--projectId--addons--addonId--metrics-get-team-scoped":{"operationId":"getProjectsAddonsAddonidMetrics","summary":"Get addon metrics","description":"Get metrics for an addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","addon","metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","addon","metrics"]}],"x-nf-permission-required":"Project > Addons > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","metrics"]},"v1-projects--projectId--addons--addonId--network-settings-post":{"operationId":"postProjectsAddonsAddonidNetworkSettings","summary":"Update addon network settings","description":"Updates the network settings for the addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"tlsEnabled":{"type":"boolean","description":"If `true`, a TLS certificate will be provisioned for the addon.","example":true},"externalAccessEnabled":{"type":"boolean","description":"If `true`, the addon will be given a public URL and will be accessible from the internet. `tlsEnabled` must be `true` to set this as `true`.","example":true},"vpcAccessible":{"type":"boolean","description":"If `true`, the addon is exposed on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`. `tlsEnabled` must be `true` to set this as `true`.","example":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","addon","network-settings"],"x-nf-deprecation-replacement":"/addons/patch-addon","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--addons--addonId--network-settings-post-team-scoped":{"operationId":"postProjectsAddonsAddonidNetworkSettings","summary":"Update addon network settings","description":"Updates the network settings for the addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"tlsEnabled":{"type":"boolean","description":"If `true`, a TLS certificate will be provisioned for the addon.","example":true},"externalAccessEnabled":{"type":"boolean","description":"If `true`, the addon will be given a public URL and will be accessible from the internet. `tlsEnabled` must be `true` to set this as `true`.","example":true},"vpcAccessible":{"type":"boolean","description":"If `true`, the addon is exposed on the cluster's private (VPC) load balancer. Mutually exclusive with `externalAccessEnabled`. `tlsEnabled` must be `true` to set this as `true`.","example":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","addon","network-settings"],"x-nf-deprecation-replacement":"/addons/patch-addon","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--addons--addonId--pause-post":{"operationId":"postProjectsAddonsAddonidPause","summary":"Pause addon","description":"Pause the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","addon"]},"v1-projects--projectId--addons--addonId--pause-post-team-scoped":{"operationId":"postProjectsAddonsAddonidPause","summary":"Pause addon","description":"Pause the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","addon"]},"v1-projects--projectId--addons--addonId--reset-post":{"operationId":"postProjectsAddonsAddonidReset","summary":"Reset addon","description":"Reset the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["reset","addon"]},"v1-projects--projectId--addons--addonId--reset-post-team-scoped":{"operationId":"postProjectsAddonsAddonidReset","summary":"Reset addon","description":"Reset the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["reset","addon"]},"v1-projects--projectId--addons--addonId--restart-post":{"operationId":"postProjectsAddonsAddonidRestart","summary":"Restart addon","description":"Restart the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restart","addon"]},"v1-projects--projectId--addons--addonId--restart-post-team-scoped":{"operationId":"postProjectsAddonsAddonidRestart","summary":"Restart addon","description":"Restart the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restart","addon"]},"v1-projects--projectId--addons--addonId--restores-get":{"operationId":"getProjectsAddonsAddonidRestores","summary":"List addon restores","description":"Returns a list of restores for the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of restores for the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"restores":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"668596c647fed81696a8a82c"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"},"backupId":{"type":"string","description":"The identifier for the backup.","example":"example-backup"}},"required":["id","status","restoreTimestamp","backupId"],"additionalProperties":false,"description":"Data about a restore."},"description":"A list of restores for the given addon."}},"required":["restores"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","restores"]},"v1-projects--projectId--addons--addonId--restores-get-team-scoped":{"operationId":"getProjectsAddonsAddonidRestores","summary":"List addon restores","description":"Returns a list of restores for the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of restores for the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"restores":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The identifier for the backup.","example":"668596c647fed81696a8a82c"},"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The current status of the backup.","example":"completed"},"restoreTimestamp":{"type":"string","format":"date-time","description":"The time the backup was initiated.","example":"2021-01-20T11:19:54.494Z"},"completedAt":{"type":"string","format":"date-time","description":"The time the restore was completed.","example":"2021-01-20T11:19:54.494Z"},"backupId":{"type":"string","description":"The identifier for the backup.","example":"example-backup"}},"required":["id","status","restoreTimestamp","backupId"],"additionalProperties":false,"description":"Data about a restore."},"description":"A list of restores for the given addon."}},"required":["restores"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","restores"]},"v1-projects--projectId--addons--addonId--resume-post":{"operationId":"postProjectsAddonsAddonidResume","summary":"Resume addon","description":"Resume the given addon if it is paused.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","addon"]},"v1-projects--projectId--addons--addonId--resume-post-team-scoped":{"operationId":"postProjectsAddonsAddonidResume","summary":"Resume addon","description":"Resume the given addon if it is paused.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","addon"]},"v1-projects--projectId--addons--addonId--scale-post":{"operationId":"postProjectsAddonsAddonidScale","summary":"Scale addon resources","description":"Modifies the allocated resources for the given addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":1024},"replicas":{"type":"integer","minimum":0,"description":"The number of addon replicas to run.","example":1}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["scale","addon"],"x-nf-deprecation-replacement":"/addons/patch-addon","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--addons--addonId--scale-post-team-scoped":{"operationId":"postProjectsAddonsAddonidScale","summary":"Scale addon resources","description":"Modifies the allocated resources for the given addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"storage":{"type":"integer","minimum":1,"description":"The size of the addon storage, in megabytes.","example":1024},"replicas":{"type":"integer","minimum":0,"description":"The number of addon replicas to run.","example":1}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["scale","addon"],"x-nf-deprecation-replacement":"/addons/patch-addon","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--addons--addonId--secret-rotation-post":{"operationId":"postProjectsAddonsAddonidSecretRotation","summary":"Rotate addon secrets","description":"Starts a secret rotation for the given addon. New credentials are created with the same permissions; the old credentials remain valid until the rotation is finalised.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["start","addon","secret-rotation"]},"v1-projects--projectId--addons--addonId--secret-rotation-post-team-scoped":{"operationId":"postProjectsAddonsAddonidSecretRotation","summary":"Rotate addon secrets","description":"Starts a secret rotation for the given addon. New credentials are created with the same permissions; the old credentials remain valid until the rotation is finalised.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["start","addon","secret-rotation"]},"v1-projects--projectId--addons--addonId--secret-rotation-finalise-post":{"operationId":"postProjectsAddonsAddonidSecretRotationFinalise","summary":"Finalise addon secret rotation","description":"Finalises an in-progress secret rotation for the given addon. The old credentials are permanently removed.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["finalise","addon","secret-rotation"]},"v1-projects--projectId--addons--addonId--secret-rotation-finalise-post-team-scoped":{"operationId":"postProjectsAddonsAddonidSecretRotationFinalise","summary":"Finalise addon secret rotation","description":"Finalises an in-progress secret rotation for the given addon. The old credentials are permanently removed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["finalise","addon","secret-rotation"]},"v1-projects--projectId--addons--addonId--security-post":{"operationId":"postProjectsAddonsAddonidSecurity","summary":"Update addon security rules","description":"Updates the security rules for the addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"ipPolicies":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"An IP address used by this rule.","example":"127.0.0.1"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"ALLOW","default":"ALLOW"}},"required":["address"],"additionalProperties":false,"description":"Data about an IP policy rule."},"uniqueItems":true,"description":"An array of IP policy rules."}},"required":["ipPolicies"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","addon","security"],"x-nf-deprecation-replacement":"/addons/patch-addon","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--addons--addonId--security-post-team-scoped":{"operationId":"postProjectsAddonsAddonidSecurity","summary":"Update addon security rules","description":"Updates the security rules for the addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"ipPolicies":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"An IP address used by this rule.","example":"127.0.0.1"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"ALLOW","default":"ALLOW"}},"required":["address"],"additionalProperties":false,"description":"Data about an IP policy rule."},"uniqueItems":true,"description":"An array of IP policy rules."}},"required":["ipPolicies"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","addon","security"],"x-nf-deprecation-replacement":"/addons/patch-addon","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--addons--addonId--version-get":{"operationId":"getProjectsAddonsAddonidVersion","summary":"Get addon version details","description":"Gets details about the current addon version including available upgrades and upgrade history.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the current version of the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"version":{"type":"string","description":"The version of the addon running.","example":"4.2.14"},"upgradeTo":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string","description":"The version of the addon to upgrade to.","example":"4.2.15"},"type":{"type":"string","enum":["major","minor","patch"],"description":"Whether the version is a major or minor version.","example":"minor"}},"required":["version","type"],"additionalProperties":false},"description":"Available versions that the addon can be upgraded to."},"lifecycleStatus":{"type":"string","enum":["active","deprecated","discontinued"],"description":"The support status of the current addon version.","example":"deprecated"},"discontinuedBy":{"type":"string","description":"The date that the current addon version will be discontinued.","example":"01.08.2021"},"upgradeHistory":{"type":"array","items":{"type":"object","properties":{"upgradeId":{"type":"string","description":"The unique identifier of the addon upgrade.","example":"611d0da52cd838bbdeec4792"},"status":{"type":"object","properties":{"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The status of the addon upgrade.","example":"completed"}},"required":["status"],"additionalProperties":false,"description":"Details about the upgrade status."},"createdAt":{"type":"string","format":"date-time","description":"The time the upgrade was initiated.","example":"2021-08-18 13:39:49.475Z"},"upgradeType":{"type":"string","enum":["major","minor","patch"],"description":"Whether the version updated to is a major or minor version.","example":"minor"},"previousVersion":{"type":"string","description":"The version upgraded from.","example":"4.2.14"},"newVersion":{"type":"string","description":"The version upgraded to.","example":"4.2.15"},"completedAt":{"type":"string","format":"date-time","description":"The time the upgrade was completed.","example":"2021-08-18T13:40:51.685Z"}},"required":["upgradeId","status","createdAt","upgradeType","previousVersion","newVersion"],"additionalProperties":false,"description":"Details about a previous upgrade."},"description":"Data about the upgrade history of this addon."}},"required":["version","upgradeTo","lifecycleStatus","upgradeHistory"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","version"]},"v1-projects--projectId--addons--addonId--version-get-team-scoped":{"operationId":"getProjectsAddonsAddonidVersion","summary":"Get addon version details","description":"Gets details about the current addon version including available upgrades and upgrade history.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the current version of the addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"version":{"type":"string","description":"The version of the addon running.","example":"4.2.14"},"upgradeTo":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string","description":"The version of the addon to upgrade to.","example":"4.2.15"},"type":{"type":"string","enum":["major","minor","patch"],"description":"Whether the version is a major or minor version.","example":"minor"}},"required":["version","type"],"additionalProperties":false},"description":"Available versions that the addon can be upgraded to."},"lifecycleStatus":{"type":"string","enum":["active","deprecated","discontinued"],"description":"The support status of the current addon version.","example":"deprecated"},"discontinuedBy":{"type":"string","description":"The date that the current addon version will be discontinued.","example":"01.08.2021"},"upgradeHistory":{"type":"array","items":{"type":"object","properties":{"upgradeId":{"type":"string","description":"The unique identifier of the addon upgrade.","example":"611d0da52cd838bbdeec4792"},"status":{"type":"object","properties":{"status":{"type":"string","enum":["scheduled","in-progress","completed","aborting","aborted","failed","not-supported"],"description":"The status of the addon upgrade.","example":"completed"}},"required":["status"],"additionalProperties":false,"description":"Details about the upgrade status."},"createdAt":{"type":"string","format":"date-time","description":"The time the upgrade was initiated.","example":"2021-08-18 13:39:49.475Z"},"upgradeType":{"type":"string","enum":["major","minor","patch"],"description":"Whether the version updated to is a major or minor version.","example":"minor"},"previousVersion":{"type":"string","description":"The version upgraded from.","example":"4.2.14"},"newVersion":{"type":"string","description":"The version upgraded to.","example":"4.2.15"},"completedAt":{"type":"string","format":"date-time","description":"The time the upgrade was completed.","example":"2021-08-18T13:40:51.685Z"}},"required":["upgradeId","status","createdAt","upgradeType","previousVersion","newVersion"],"additionalProperties":false,"description":"Details about a previous upgrade."},"description":"Data about the upgrade history of this addon."}},"required":["version","upgradeTo","lifecycleStatus","upgradeHistory"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"x-nf-permission-required":"Project > Addons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","addon","version"]},"v1-projects--projectId--addons--addonId--version-post":{"operationId":"postProjectsAddonsAddonidVersion","summary":"Upgrade addon version","description":"Upgrades the addon to a new version.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","description":"The version to upgrade the addon to.","example":"4.2.15"}},"required":["version"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","addon","version"]},"v1-projects--projectId--addons--addonId--version-post-team-scoped":{"operationId":"postProjectsAddonsAddonidVersion","summary":"Upgrade addon version","description":"Upgrades the addon to a new version.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","description":"The version to upgrade the addon to.","example":"4.2.15"}},"required":["version"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Addons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","addon","version"]},"v1-projects--projectId--external-addons-get":{"operationId":"getProjectsExternalAddons","summary":"List external addons","description":"Gets a list of external addons belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"resourceType","type":"string","description":"Filter by resource type (s3, rds)","example":"s3","in":"query","schema":{"name":"resourceType","type":"string","description":"Filter by resource type (s3, rds)","example":"s3","in":"query"}},{"name":"status","type":"string","description":"Filter by status (creating, active, error, deleting, deleted)","example":"active","in":"query","schema":{"name":"status","type":"string","description":"Filter by status (creating, active, error, deleting, deleted)","example":"active","in":"query"}}],"responses":{"200":{"description":"A list of external addons belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"data":{"type":"object","properties":{"externalAddons":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"External addon object"},"description":"List of external addons"},"pagination":{"type":"object","properties":{"page":{"type":"integer","description":"Current page number"},"perPage":{"type":"integer","description":"Items per page"},"total":{"type":"integer","description":"Total number of items"}},"required":["page","perPage","total"],"additionalProperties":false,"description":"Pagination information"}},"required":["externalAddons","pagination"],"additionalProperties":false}},"required":["data"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"x-nf-permission-required":"Project > ExternalAddons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","external-addons"]},"v1-projects--projectId--external-addons-get-team-scoped":{"operationId":"getProjectsExternalAddons","summary":"List external addons","description":"Gets a list of external addons belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"resourceType","type":"string","description":"Filter by resource type (s3, rds)","example":"s3","in":"query","schema":{"name":"resourceType","type":"string","description":"Filter by resource type (s3, rds)","example":"s3","in":"query"}},{"name":"status","type":"string","description":"Filter by status (creating, active, error, deleting, deleted)","example":"active","in":"query","schema":{"name":"status","type":"string","description":"Filter by status (creating, active, error, deleting, deleted)","example":"active","in":"query"}}],"responses":{"200":{"description":"A list of external addons belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"data":{"type":"object","properties":{"externalAddons":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"External addon object"},"description":"List of external addons"},"pagination":{"type":"object","properties":{"page":{"type":"integer","description":"Current page number"},"perPage":{"type":"integer","description":"Items per page"},"total":{"type":"integer","description":"Total number of items"}},"required":["page","perPage","total"],"additionalProperties":false,"description":"Pagination information"}},"required":["externalAddons","pagination"],"additionalProperties":false}},"required":["data"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"x-nf-permission-required":"Project > ExternalAddons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","external-addons"]},"v1-projects--projectId--external-addons-post":{"operationId":"postProjectsExternalAddons","summary":"Create external addon","description":"Creates a new external addon (third-party cloud resource provisioned via OpenTofu)","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created external addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Request body for creating an external addon"}}},"required":true},"x-nf-permission-required":"Project > ExternalAddons > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","external-addon"]},"v1-projects--projectId--external-addons-post-team-scoped":{"operationId":"postProjectsExternalAddons","summary":"Create external addon","description":"Creates a new external addon (third-party cloud resource provisioned via OpenTofu)","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created external addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Request body for creating an external addon"}}},"required":true},"x-nf-permission-required":"Project > ExternalAddons > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","external-addon"]},"v1-projects--projectId--external-addons--externalAddonId--get":{"operationId":"getProjectsExternalAddonsExternaladdonid","summary":"Get external addon","description":"Gets information about the given external addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path","schema":{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path"}}],"responses":{"200":{"description":"Details about the external addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"x-nf-permission-required":"Project > ExternalAddons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","external-addon"]},"v1-projects--projectId--external-addons--externalAddonId--get-team-scoped":{"operationId":"getProjectsExternalAddonsExternaladdonid","summary":"Get external addon","description":"Gets information about the given external addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path","schema":{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path"}}],"responses":{"200":{"description":"Details about the external addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"x-nf-permission-required":"Project > ExternalAddons > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","external-addon"]},"v1-projects--projectId--external-addons--externalAddonId--patch":{"operationId":"patchProjectsExternalAddonsExternaladdonid","summary":"Update external addon","description":"Updates configuration for an external addon","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path","schema":{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path"}}],"responses":{"200":{"description":"Details about the updated external addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false}},"additionalProperties":false,"description":"Request body for updating an external addon"}}},"required":true},"x-nf-permission-required":"Project > ExternalAddons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","external-addon"]},"v1-projects--projectId--external-addons--externalAddonId--patch-team-scoped":{"operationId":"patchProjectsExternalAddonsExternaladdonid","summary":"Update external addon","description":"Updates configuration for an external addon","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path","schema":{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path"}}],"responses":{"200":{"description":"Details about the updated external addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"environmentId":{"type":"string"},"spec":{"type":"object","properties":{"resourceType":{"type":"string","enum":["s3","rds","cloudSql","memorystore"]},"provider":{"type":"object","properties":{"aws":{"type":"object","properties":{"region":{"type":"string","example":"eu-west-1"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["region","integrationId"],"additionalProperties":false},"google":{"type":"object","properties":{"project":{"type":"string"},"region":{"type":"string","example":"us-central1"},"zone":{"type":"string","example":"us-central1-c"},"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["project","integrationId"],"additionalProperties":false},"cloudflare":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"aiven":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"backblaze":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"azure":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"akamai":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false},"planetscale":{"type":"object","properties":{"integrationId":{"type":"string","pattern":"^((org|team)\\/)?[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"Integration to use for this job."}},"required":["integrationId"],"additionalProperties":false}},"additionalProperties":false},"config":{"type":"object","properties":{},"additionalProperties":false},"outputs":{"type":"object","properties":{},"additionalProperties":false},"workloadIdentityId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100}},"required":["resourceType","config"],"additionalProperties":false}},"additionalProperties":false,"description":"Request body for updating an external addon"}}},"required":true},"x-nf-permission-required":"Project > ExternalAddons > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","external-addon"]},"v1-projects--projectId--external-addons--externalAddonId--delete":{"operationId":"deleteProjectsExternalAddonsExternaladdonid","summary":"Delete external addon","description":"Deletes an external addon and destroys the associated cloud resource","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path","schema":{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"x-nf-permission-required":"Project > ExternalAddons > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","external-addon"]},"v1-projects--projectId--external-addons--externalAddonId--delete-team-scoped":{"operationId":"deleteProjectsExternalAddonsExternaladdonid","summary":"Delete external addon","description":"Deletes an external addon and destroys the associated cloud resource","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path","schema":{"name":"externalAddonId","type":"string","required":true,"description":"ID of the external addon","example":"my-s3-bucket","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["External Addons","project"],"security":[],"x-nf-permission-required":"Project > ExternalAddons > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","external-addon"]},"v1-projects--projectId--harnesses-get":{"operationId":"getProjectsHarnesses","summary":"List harnesses","description":"Gets a list of harnesses belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"projectUrl","type":"string","description":"If provided, only returns harnesses whose source repository URL matches this value.","example":"https://github.com/northflank-examples/next-js-example","in":"query","schema":{"name":"projectUrl","type":"string","description":"If provided, only returns harnesses whose source repository URL matches this value.","example":"https://github.com/northflank-examples/next-js-example","in":"query"}},{"name":"projectType","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns harnesses whose source VCS provider matches this value.","example":"github","in":"query","schema":{"name":"projectType","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns harnesses whose source VCS provider matches this value.","example":"github","in":"query"}},{"name":"projectBranch","type":"string","description":"If provided, only returns harnesses whose source branch matches this value.","example":"main","in":"query","schema":{"name":"projectBranch","type":"string","description":"If provided, only returns harnesses whose source branch matches this value.","example":"main","in":"query"}}],"responses":{"200":{"description":"A list of harnesses belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"harnesses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the harness.","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Harness name.","example":"Example Harness"},"appId":{"type":"string","description":"Full identifier for the harness.","example":"/example-user/default-project/example-harness"},"tags":{"type":"array","items":{"type":"string"}},"private":{"type":"boolean","description":"Whether runtime access is restricted to the creator."},"description":{"type":"string","description":"A short description of the harness.","example":"This is the harness description"},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type.","example":"claude"}},"required":["type"],"additionalProperties":false,"description":"Details about the harness's specifications."},"source":{"type":"object","properties":{"projectUrl":{"type":"string","description":"URL of the git repository pre-pulled into the harness environment.","example":"https://github.com/northflank-examples/next-js-example"},"projectType":{"type":"string","description":"The VCS provider of the harness source.","example":"github"},"projectBranch":{"type":"string","description":"The branch of the harness source.","example":"main"}},"additionalProperties":false,"description":"The git source linked to the harness."},"status":{"type":"object","properties":{},"additionalProperties":false,"description":"The current status of the harness."}},"required":["id","uid","name","appId"],"additionalProperties":false,"description":"Information about a harness."},"description":"An array of harnesses."}},"required":["harnesses"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","harnesses"]},"v1-projects--projectId--harnesses-get-team-scoped":{"operationId":"getProjectsHarnesses","summary":"List harnesses","description":"Gets a list of harnesses belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"projectUrl","type":"string","description":"If provided, only returns harnesses whose source repository URL matches this value.","example":"https://github.com/northflank-examples/next-js-example","in":"query","schema":{"name":"projectUrl","type":"string","description":"If provided, only returns harnesses whose source repository URL matches this value.","example":"https://github.com/northflank-examples/next-js-example","in":"query"}},{"name":"projectType","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns harnesses whose source VCS provider matches this value.","example":"github","in":"query","schema":{"name":"projectType","type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"If provided, only returns harnesses whose source VCS provider matches this value.","example":"github","in":"query"}},{"name":"projectBranch","type":"string","description":"If provided, only returns harnesses whose source branch matches this value.","example":"main","in":"query","schema":{"name":"projectBranch","type":"string","description":"If provided, only returns harnesses whose source branch matches this value.","example":"main","in":"query"}}],"responses":{"200":{"description":"A list of harnesses belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"harnesses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the harness.","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Harness name.","example":"Example Harness"},"appId":{"type":"string","description":"Full identifier for the harness.","example":"/example-user/default-project/example-harness"},"tags":{"type":"array","items":{"type":"string"}},"private":{"type":"boolean","description":"Whether runtime access is restricted to the creator."},"description":{"type":"string","description":"A short description of the harness.","example":"This is the harness description"},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type.","example":"claude"}},"required":["type"],"additionalProperties":false,"description":"Details about the harness's specifications."},"source":{"type":"object","properties":{"projectUrl":{"type":"string","description":"URL of the git repository pre-pulled into the harness environment.","example":"https://github.com/northflank-examples/next-js-example"},"projectType":{"type":"string","description":"The VCS provider of the harness source.","example":"github"},"projectBranch":{"type":"string","description":"The branch of the harness source.","example":"main"}},"additionalProperties":false,"description":"The git source linked to the harness."},"status":{"type":"object","properties":{},"additionalProperties":false,"description":"The current status of the harness."}},"required":["id","uid","name","appId"],"additionalProperties":false,"description":"Information about a harness."},"description":"An array of harnesses."}},"required":["harnesses"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","harnesses"]},"v1-projects--projectId--harnesses-post":{"operationId":"postProjectsHarnesses","summary":"Create harness","description":"Creates a new harness","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a harness with the same derived identifier"}},"tags":["Harnesses","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"branchData":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Existing linked repository and base branch for the new branch."},"name":{"type":"string","maxLength":255,"description":"Name of the new branch to create.","example":"harness/my-task"}},"required":["source","name"],"additionalProperties":false},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How Codex, Claude and Cursor authenticate. Pi and OpenCode require `account`; agentless harnesses omit this field. When omitted for Codex, Claude or Cursor, `apiKey` is inferred if an apiKey is provided.","example":"apiKey"},"apiKey":{"type":"string","oneOf":[{"description":"API key used by the harness environment.","x-required":true},{"description":"API key used by the harness environment."}],"description":"API key used by the harness environment.","writeOnly":true},"cloneDirectory":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"Absolute path the repo is cloned into in the harness container. Must be /home/harness or a directory inside it. This workspace is persisted only when deployment.persistentWorkspace is enabled. Defaults to /home/harness. Can only be set when creating the harness.","example":"/home/harness/repo"}},"required":["type"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","deployment","harness"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Harnesses > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","harness"]},"v1-projects--projectId--harnesses-post-team-scoped":{"operationId":"postProjectsHarnesses","summary":"Create harness","description":"Creates a new harness","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a harness with the same derived identifier"}},"tags":["Harnesses","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"branchData":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Existing linked repository and base branch for the new branch."},"name":{"type":"string","maxLength":255,"description":"Name of the new branch to create.","example":"harness/my-task"}},"required":["source","name"],"additionalProperties":false},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How Codex, Claude and Cursor authenticate. Pi and OpenCode require `account`; agentless harnesses omit this field. When omitted for Codex, Claude or Cursor, `apiKey` is inferred if an apiKey is provided.","example":"apiKey"},"apiKey":{"type":"string","oneOf":[{"description":"API key used by the harness environment.","x-required":true},{"description":"API key used by the harness environment."}],"description":"API key used by the harness environment.","writeOnly":true},"cloneDirectory":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"Absolute path the repo is cloned into in the harness container. Must be /home/harness or a directory inside it. This workspace is persisted only when deployment.persistentWorkspace is enabled. Defaults to /home/harness. Can only be set when creating the harness.","example":"/home/harness/repo"}},"required":["type"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","deployment","harness"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Harnesses > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","harness"]},"v1-projects--projectId--harnesses-put":{"operationId":"putProjectsHarnesses","summary":"Put harness","description":"Creates or updates a harness","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"Details about the created or updated harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How Codex, Claude and Cursor authenticate. Pi and OpenCode require `account`; agentless harnesses omit this field. When omitted for Codex, Claude or Cursor, `apiKey` is inferred if an apiKey is provided.","example":"apiKey"},"apiKey":{"type":"string","oneOf":[{"description":"API key used by the harness environment.","x-required":true},{"description":"API key used by the harness environment."}],"description":"API key used by the harness environment.","writeOnly":true},"cloneDirectory":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"Absolute path the repo is cloned into in the harness container. Must be /home/harness or a directory inside it. This workspace is persisted only when deployment.persistentWorkspace is enabled. Defaults to /home/harness. Can only be set when creating the harness.","example":"/home/harness/repo"}},"required":["type"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","deployment","harness"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Harnesses > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","harness"]},"v1-projects--projectId--harnesses-put-team-scoped":{"operationId":"putProjectsHarnesses","summary":"Put harness","description":"Creates or updates a harness","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"Details about the created or updated harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How Codex, Claude and Cursor authenticate. Pi and OpenCode require `account`; agentless harnesses omit this field. When omitted for Codex, Claude or Cursor, `apiKey` is inferred if an apiKey is provided.","example":"apiKey"},"apiKey":{"type":"string","oneOf":[{"description":"API key used by the harness environment.","x-required":true},{"description":"API key used by the harness environment."}],"description":"API key used by the harness environment.","writeOnly":true},"cloneDirectory":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"Absolute path the repo is cloned into in the harness container. Must be /home/harness or a directory inside it. This workspace is persisted only when deployment.persistentWorkspace is enabled. Defaults to /home/harness. Can only be set when creating the harness.","example":"/home/harness/repo"}},"required":["type"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","deployment","harness"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Harnesses > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","harness"]},"v1-projects--projectId--harnesses--harnessId--get":{"operationId":"getProjectsHarnessesHarnessid","summary":"Get harness","description":"Gets information about the given harness","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}}],"responses":{"200":{"description":"Details about the harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","harness"]},"v1-projects--projectId--harnesses--harnessId--get-team-scoped":{"operationId":"getProjectsHarnessesHarnessid","summary":"Get harness","description":"Gets information about the given harness","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}}],"responses":{"200":{"description":"Details about the harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","harness"]},"v1-projects--projectId--harnesses--harnessId--patch":{"operationId":"patchProjectsHarnessesHarnessid","summary":"Patch harness","description":"Updates a harness","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"Details about the updated harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"authMode":{"type":"string","enum":["apiKey","account"],"description":"How Codex, Claude and Cursor authenticate. Pi and OpenCode require `account`; agentless harnesses omit this field. When omitted for Codex, Claude or Cursor, `apiKey` is inferred if an apiKey is provided.","example":"apiKey"},"apiKey":{"type":"string","oneOf":[{"description":"API key used by the harness environment.","x-required":true},{"description":"API key used by the harness environment."}],"description":"API key used by the harness environment.","writeOnly":true}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","harness"]},"v1-projects--projectId--harnesses--harnessId--patch-team-scoped":{"operationId":"patchProjectsHarnessesHarnessid","summary":"Patch harness","description":"Updates a harness","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"Details about the updated harness.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the harness.","example":"Example Harness"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"private":{"type":"boolean","description":"Only the creator can connect to this harness. Set at creation only.","default":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"repositoryData":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"Name of the new repository to create.","example":"my-harness-repo"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to create the repository on."},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"Linked account ID under which to create the repository."},"accountLogin":{"type":"string","description":"Linked account login to create the repository under."},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"privateRepo":{"type":"boolean","description":"Whether the new repository should be private.","default":true},"context":{"type":"string","description":"Namespace/owner the repository is created under (gitlab/bitbucket)."},"folder":{"type":"string","description":"Project/folder the repository is created under (bitbucket)."},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description for the new repository."}},"required":["name","projectType","vcsLinkId"],"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image.","default":"managed"},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false,"description":"Runtime storage settings. Ephemeral storage defaults to 10240 MiB."},"persistentWorkspace":{"type":"boolean","description":"Use a persistent workspace volume. Defaults to true on creation. Prefers ReadWriteMany, falling back to ReadWriteOnce. When false, files are lost on container restart, redeployment or stop. Cannot be changed after creation.","example":true},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"type":{"type":"string","enum":["codex","claude","pi","opencode","cursor","none"],"description":"The harness environment type to run.","example":"claude"},"authMode":{"type":"string","enum":["apiKey","account"],"description":"How the harness authenticates: `apiKey` (a provider key is stored) or `account` (interactive/account login, no key).","example":"apiKey"},"apiKey":{"type":"string","description":"Masked API key used by the harness environment. Absent for `account` harnesses.","example":"sk-...abcd"},"cloneDirectory":{"type":"string","description":"Absolute path the repo is cloned into in the harness container."}},"required":["type"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the harness","example":"example-harness"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for harness deployment","example":"/example-user/default-project/example-harness"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"harnessPaused":{"type":"boolean","description":"Is the harness paused?"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current harness status."}},"required":["name","billing","deployment","harness","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the harness.","example":"A harness description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"additionalProperties":false},"additionalRepositories":{"type":"array","items":{"type":"object","properties":{"source":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to pre-pull for the harness environment.","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the linked repository is public."}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false,"description":"Repository and branch to clone alongside the primary repository."},"directory":{"type":"string","pattern":"^(?!\\.{1,2}$)[A-Za-z0-9._-]+$","maxLength":237,"description":"Folder to clone the repository into, relative to /home/harness.","example":"payments-api"}},"required":["source","directory"],"additionalProperties":false},"maxItems":10,"uniqueItems":true,"description":"Additional repositories to clone into the harness workspace."},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the harness","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"deployment":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false},"imageSource":{"type":"string","enum":["managed","internal","external"],"description":"Container image source. Managed uses the Northflank harness image, internal uses a Northflank build service, and external uses a registry image."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false}},"additionalProperties":false},"workspaceSize":{"type":"integer","minimum":5120,"maximum":102400,"description":"Size of the persistent workspace volume in MiB. Only available with persistence enabled. Can only be grown after creation; shrinking is rejected because Kubernetes does not support shrinking persistent volume claims.","example":10240}},"additionalProperties":false},"harness":{"type":"object","properties":{"authMode":{"type":"string","enum":["apiKey","account"],"description":"How Codex, Claude and Cursor authenticate. Pi and OpenCode require `account`; agentless harnesses omit this field. When omitted for Codex, Claude or Cursor, `apiKey` is inferred if an apiKey is provided.","example":"apiKey"},"apiKey":{"type":"string","oneOf":[{"description":"API key used by the harness environment.","x-required":true},{"description":"API key used by the harness environment."}],"description":"API key used by the harness environment.","writeOnly":true}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","harness"]},"v1-projects--projectId--harnesses--harnessId--delete":{"operationId":"deleteProjectsHarnessesHarnessid","summary":"Delete harness","description":"Deletes the given harness.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","harness"]},"v1-projects--projectId--harnesses--harnessId--delete-team-scoped":{"operationId":"deleteProjectsHarnessesHarnessid","summary":"Delete harness","description":"Deletes the given harness.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","harness"]},"v1-projects--projectId--harnesses--harnessId--logs-get":{"operationId":"getProjectsHarnessesHarnessidLogs","summary":"Get harness logs","description":"Get logs for a harness","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query","schema":{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Harnesses > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","harness","logs"]},"v1-projects--projectId--harnesses--harnessId--logs-get-team-scoped":{"operationId":"getProjectsHarnessesHarnessidLogs","summary":"Get harness logs","description":"Get logs for a harness","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query","schema":{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Harnesses > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","harness","logs"]},"v1-projects--projectId--harnesses--harnessId--pause-post":{"operationId":"postProjectsHarnessesHarnessidPause","summary":"Pause harness","description":"Pauses the given harness, scaling its deployment to zero.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The harness could not be paused as it is already paused."}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","harness"]},"v1-projects--projectId--harnesses--harnessId--pause-post-team-scoped":{"operationId":"postProjectsHarnessesHarnessidPause","summary":"Pause harness","description":"Pauses the given harness, scaling its deployment to zero.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The harness could not be paused as it is already paused."}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","harness"]},"v1-projects--projectId--harnesses--harnessId--restart-post":{"operationId":"postProjectsHarnessesHarnessidRestart","summary":"Restart harness","description":"Restarts the given harness.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restart","harness"]},"v1-projects--projectId--harnesses--harnessId--restart-post-team-scoped":{"operationId":"postProjectsHarnessesHarnessidRestart","summary":"Restart harness","description":"Restarts the given harness.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}},{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query","schema":{"name":"acknowledgeActiveSessions","type":"boolean","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restart","harness"]},"v1-projects--projectId--harnesses--harnessId--resume-post":{"operationId":"postProjectsHarnessesHarnessidResume","summary":"Resume harness","description":"Resumes the given harness, restoring its deployment.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The harness could not be resumed as it is not paused."}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","harness"]},"v1-projects--projectId--harnesses--harnessId--resume-post-team-scoped":{"operationId":"postProjectsHarnessesHarnessidResume","summary":"Resume harness","description":"Resumes the given harness, restoring its deployment.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path","schema":{"name":"harnessId","type":"string","required":true,"description":"ID of the harness","example":"example-harness","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The harness could not be resumed as it is not paused."}},"tags":["Harnesses","project"],"security":[],"x-nf-permission-required":"Project > Harnesses > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","harness"]},"v1-projects--projectId--jobs-get":{"operationId":"getProjectsJobs","summary":"List jobs","description":"Gets a list of jobs belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of jobs belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"projectId":{"type":"string","description":"ID of the project that the job belongs to","example":"default-project"},"stageId":{"type":"string","description":"ID of the environment the job belongs to.","example":"staging"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"name":{"type":"string","description":"Job name","example":"Example Job"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the job","example":"This is the job description"},"jobType":{"type":"string","enum":["manual","cron"],"description":"Type of the job (manual or cron)","example":"cron"},"disabledCI":{"type":"boolean","description":"Whether Continuous Integration is disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether Continuous Deployment is disabled","example":false},"suspended":{"type":"boolean","description":"Cron specific. Whether or not the job's automatic scheduling is suspended","example":false}},"required":["id","uid","projectId","appId","name","tags","jobType","disabledCI","disabledCD"],"additionalProperties":false},"description":"An array of job objects."}},"required":["jobs"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","jobs"]},"v1-projects--projectId--jobs-get-team-scoped":{"operationId":"getProjectsJobs","summary":"List jobs","description":"Gets a list of jobs belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of jobs belonging to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"jobs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"projectId":{"type":"string","description":"ID of the project that the job belongs to","example":"default-project"},"stageId":{"type":"string","description":"ID of the environment the job belongs to.","example":"staging"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"name":{"type":"string","description":"Job name","example":"Example Job"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the job","example":"This is the job description"},"jobType":{"type":"string","enum":["manual","cron"],"description":"Type of the job (manual or cron)","example":"cron"},"disabledCI":{"type":"boolean","description":"Whether Continuous Integration is disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether Continuous Deployment is disabled","example":false},"suspended":{"type":"boolean","description":"Cron specific. Whether or not the job's automatic scheduling is suspended","example":false}},"required":["id","uid","projectId","appId","name","tags","jobType","disabledCI","disabledCD"],"additionalProperties":false},"description":"An array of job objects."}},"required":["jobs"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","jobs"]},"v1-projects--projectId--jobs-post":{"operationId":"postProjectsJobs","summary":"Create job","description":"Creates a new job (manual or cron based on settings.cron presence)","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false}},"required":["name","billing"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","job"]},"v1-projects--projectId--jobs-post-team-scoped":{"operationId":"postProjectsJobs","summary":"Create job","description":"Creates a new job (manual or cron based on settings.cron presence)","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false}},"required":["name","billing"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","job"]},"v1-projects--projectId--jobs-put":{"operationId":"putProjectsJobs","summary":"Put job","description":"Creates or updates a job (manual or cron based on settings.cron presence)","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false}},"required":["name","billing"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","job"]},"v1-projects--projectId--jobs-put-team-scoped":{"operationId":"putProjectsJobs","summary":"Put job","description":"Creates or updates a job (manual or cron based on settings.cron presence)","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false}},"required":["name","billing"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","job"]},"v1-projects--projectId--jobs-cron-post":{"operationId":"postProjectsJobsCron","summary":"Create cron job","description":"Creates a new cron job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create job","x-nf-cli-command":["create","job","cron"],"x-nf-deprecation-replacement":"/jobs/create-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-cron-post-team-scoped":{"operationId":"postProjectsJobsCron","summary":"Create cron job","description":"Creates a new cron job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create job","x-nf-cli-command":["create","job","cron"],"x-nf-deprecation-replacement":"/jobs/create-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-cron-put":{"operationId":"putProjectsJobsCron","summary":"Put cron job","description":"Creates or updates a cron job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put job","x-nf-cli-command":["put","job","cron"],"x-nf-deprecation-replacement":"/jobs/put-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-cron-put-team-scoped":{"operationId":"putProjectsJobsCron","summary":"Put cron job","description":"Creates or updates a cron job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put job","x-nf-cli-command":["put","job","cron"],"x-nf-deprecation-replacement":"/jobs/put-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-cron--jobId--patch":{"operationId":"patchProjectsJobsCronJobid","summary":"Patch cron job","description":"Updates a cron job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control."},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch job","x-nf-cli-command":["patch","job","cron"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-cron--jobId--patch-team-scoped":{"operationId":"patchProjectsJobsCronJobid","summary":"Patch cron job","description":"Updates a cron job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control."},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch job","x-nf-cli-command":["patch","job","cron"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-manual-post":{"operationId":"postProjectsJobsManual","summary":"Create manual job","description":"Creates a new manual job that only runs when initiated via the UI, CLI, API or JS client.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"jobType":{"type":"string","enum":["manual"],"description":"Type of the job (manual or manual)","example":"manual"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create job","x-nf-cli-command":["create","job","manual"],"x-nf-deprecation-replacement":"/jobs/create-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-manual-post-team-scoped":{"operationId":"postProjectsJobsManual","summary":"Create manual job","description":"Creates a new manual job that only runs when initiated via the UI, CLI, API or JS client.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"jobType":{"type":"string","enum":["manual"],"description":"Type of the job (manual or manual)","example":"manual"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create job","x-nf-cli-command":["create","job","manual"],"x-nf-deprecation-replacement":"/jobs/create-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-manual-put":{"operationId":"putProjectsJobsManual","summary":"Put manual job","description":"Creates or updates a new manual job that only runs when initiated via the UI, CLI, API or JS client.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"jobType":{"type":"string","enum":["manual"],"description":"Type of the job (manual or manual)","example":"manual"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put job","x-nf-cli-command":["put","job","manual"],"x-nf-deprecation-replacement":"/jobs/put-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-manual-put-team-scoped":{"operationId":"putProjectsJobsManual","summary":"Put manual job","description":"Creates or updates a new manual job that only runs when initiated via the UI, CLI, API or JS client.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"jobType":{"type":"string","enum":["manual"],"description":"Type of the job (manual or manual)","example":"manual"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false}},"required":["vcs"],"additionalProperties":false,"description":"Deploy from version control"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Deploy from an external image"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Deploy from a Northflank build service"},{"type":"object","properties":{},"additionalProperties":false,"description":"Choose later"}],"description":"Where to deploy the job from."},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"required":["name","billing","backoffLimit"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put job","x-nf-cli-command":["put","job","manual"],"x-nf-deprecation-replacement":"/jobs/put-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-manual--jobId--patch":{"operationId":"patchProjectsJobsManualJobid","summary":"Patch manual job","description":"Updates a new manual job that only runs when initiated via the UI, CLI, API or JS client.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"jobType":{"type":"string","enum":["manual"],"description":"Type of the job (manual or manual)","example":"manual"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control."},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch job","x-nf-cli-command":["patch","job","manual"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs-manual--jobId--patch-team-scoped":{"operationId":"patchProjectsJobsManualJobid","summary":"Patch manual job","description":"Updates a new manual job that only runs when initiated via the UI, CLI, API or JS client.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"jobType":{"type":"string","enum":["manual"],"description":"Type of the job (manual or manual)","example":"manual"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","backoffLimit","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control."},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch job","x-nf-cli-command":["patch","job","manual"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant type-agnostic job endpoint."},"v1-projects--projectId--jobs--jobId--get":{"operationId":"getProjectsJobsJobid","summary":"Get job","description":"Gets information about the given job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"name":{"type":"string","description":"Job name","example":"Example Job"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the job","example":"This is the job description"},"projectId":{"type":"string","description":"ID of the project that the job belongs to","example":"default-project"},"stageId":{"type":"string","description":"ID of the environment the job belongs to.","example":"staging"},"jobType":{"type":"string","enum":["manual","cron"],"description":"Type of the job (manual or cron)","example":"cron"},"createdAt":{"type":"string","format":"date-time","description":"The time the job was created.","example":"2021-01-20T11:19:53.175Z"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","description":"URL of the repository being built","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"VCS provider for the repo being built","example":"github"},"selfHostedVcsId":{"type":"string","description":"ID of the self-hosted VCS, if applicable.","example":"example-team/self-hosted-vcs"},"projectBranch":{"type":"string","description":"Branch of the repo being built","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the repo is being accessed without authentication.","example":false},"dockerWorkDir":{"type":"string","description":"Working directory used by the dockerfile","example":"/"},"dockerFilePath":{"type":"string","description":"File path of the Dockerfile","example":"/Dockerfile"}},"required":["projectUrl","projectType","dockerWorkDir","dockerFilePath"],"additionalProperties":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildEngineConfiguration":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildpack","buildkit","kaniko"],"description":"The build engine used.","example":"buildpack"},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"The Buildpack stack used.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks used.","default":[]},"useCache":{"type":"boolean","description":"Should build dependencies be cached?"}},"additionalProperties":false,"description":"Details about Buildpack settings."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"},"useInternalCache":{"type":"boolean","description":"Should use persistent storage to store all layers?"},"internalCacheStorage":{"type":"boolean","description":"Storage size to use for internal cache"}},"additionalProperties":false,"description":"Details about Buildkit settings."},"kaniko":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"}},"additionalProperties":false,"description":"Details about Kaniko settings."}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether Continuous Integration is disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether Continuous Deployment is disabled","example":false},"deployment":{"type":"object","properties":{"region":{"type":"string","description":"Region where this job is deployed and built","example":"europe-west"},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."}},"additionalProperties":false},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","description":"ID of the billing plan used by this job","example":"nf-compute-20"}},"required":["deploymentPlan"],"additionalProperties":false},"suspended":{"type":"boolean","description":"Cron specific. Whether or not the job's automatic scheduling is suspended","example":false},"settings":{"type":"object","properties":{"cron":{"type":"object","properties":{"schedule":{"type":"string","description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"concurrencyPolicy":{"type":"string","enum":["Allow","Forbid","Replace"],"description":"Whether this job should run when another instance of the job is already running.","example":"Allow"}},"additionalProperties":false,"description":"Cron job specific settings"},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"activeDeadlineSeconds":{"type":"integer","minimum":1,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"required":["backoffLimit","activeDeadlineSeconds"],"additionalProperties":false,"description":"Job settings"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"}},"required":["id","uid","appId","name","tags","projectId","jobType","createdAt","disabledCI","disabledCD","billing","settings","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job"]},"v1-projects--projectId--jobs--jobId--get-team-scoped":{"operationId":"getProjectsJobsJobid","summary":"Get job","description":"Gets information about the given job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"name":{"type":"string","description":"Job name","example":"Example Job"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the job","example":"This is the job description"},"projectId":{"type":"string","description":"ID of the project that the job belongs to","example":"default-project"},"stageId":{"type":"string","description":"ID of the environment the job belongs to.","example":"staging"},"jobType":{"type":"string","enum":["manual","cron"],"description":"Type of the job (manual or cron)","example":"cron"},"createdAt":{"type":"string","format":"date-time","description":"The time the job was created.","example":"2021-01-20T11:19:53.175Z"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","description":"URL of the repository being built","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"VCS provider for the repo being built","example":"github"},"selfHostedVcsId":{"type":"string","description":"ID of the self-hosted VCS, if applicable.","example":"example-team/self-hosted-vcs"},"projectBranch":{"type":"string","description":"Branch of the repo being built","example":"master"},"publicRepo":{"type":"boolean","description":"Whether the repo is being accessed without authentication.","example":false},"dockerWorkDir":{"type":"string","description":"Working directory used by the dockerfile","example":"/"},"dockerFilePath":{"type":"string","description":"File path of the Dockerfile","example":"/Dockerfile"}},"required":["projectUrl","projectType","dockerWorkDir","dockerFilePath"],"additionalProperties":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildEngineConfiguration":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildpack","buildkit","kaniko"],"description":"The build engine used.","example":"buildpack"},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"The Buildpack stack used.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks used.","default":[]},"useCache":{"type":"boolean","description":"Should build dependencies be cached?"}},"additionalProperties":false,"description":"Details about Buildpack settings."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"},"useInternalCache":{"type":"boolean","description":"Should use persistent storage to store all layers?"},"internalCacheStorage":{"type":"boolean","description":"Storage size to use for internal cache"}},"additionalProperties":false,"description":"Details about Buildkit settings."},"kaniko":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"}},"additionalProperties":false,"description":"Details about Kaniko settings."}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether Continuous Integration is disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether Continuous Deployment is disabled","example":false},"deployment":{"type":"object","properties":{"region":{"type":"string","description":"Region where this job is deployed and built","example":"europe-west"},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."}},"additionalProperties":false},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","description":"ID of the billing plan used by this job","example":"nf-compute-20"}},"required":["deploymentPlan"],"additionalProperties":false},"suspended":{"type":"boolean","description":"Cron specific. Whether or not the job's automatic scheduling is suspended","example":false},"settings":{"type":"object","properties":{"cron":{"type":"object","properties":{"schedule":{"type":"string","description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"concurrencyPolicy":{"type":"string","enum":["Allow","Forbid","Replace"],"description":"Whether this job should run when another instance of the job is already running.","example":"Allow"}},"additionalProperties":false,"description":"Cron job specific settings"},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"activeDeadlineSeconds":{"type":"integer","minimum":1,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600}},"required":["backoffLimit","activeDeadlineSeconds"],"additionalProperties":false,"description":"Job settings"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"}},"required":["id","uid","appId","name","tags","projectId","jobType","createdAt","disabledCI","disabledCD","billing","settings","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job"]},"v1-projects--projectId--jobs--jobId--patch":{"operationId":"patchProjectsJobsJobid","summary":"Patch job","description":"Updates a job (manual or cron based on current type and settings.cron)","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control."},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","job"]},"v1-projects--projectId--jobs--jobId--patch-team-scoped":{"operationId":"patchProjectsJobsJobid","summary":"Patch job","description":"Updates a job (manual or cron based on current type and settings.cron)","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the updated job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":52,"description":"The name of the job.","example":"Example Job"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control.","default":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never","default":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false,"default":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid","default":"forbid"}},"additionalProperties":false}},"required":["backoffLimit"],"additionalProperties":false},"jobType":{"type":"string","enum":["cron"],"description":"Type of the job (manual or cron)","example":"cron"},"id":{"type":"string","description":"Identifier for the job","example":"example-job"},"appId":{"type":"string","description":"Full identifier used for job deployment","example":"/example-user/default-project/example-job"},"deployment":{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"vcs":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"additionalProperties":false,"default":{}},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current job status."},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","billing","jobType","id","appId","status","cluster"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the job.","example":"A job description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled. Only relevant for jobs deploying directly from version control."},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"variable1":"abcdef","variable2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"settings":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"nullable":true,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"cron":{"type":"object","properties":{"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","nullable":true,"description":"The cron timer scheduling when to run the job.","example":"30 8 * * *"},"suspended":{"type":"boolean","description":"Whether the cron's automatic scheduling is suspended","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"forbid"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","job"]},"v1-projects--projectId--jobs--jobId--delete":{"operationId":"deleteProjectsJobsJobid","summary":"Delete job","description":"Deletes the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","job"]},"v1-projects--projectId--jobs--jobId--delete-team-scoped":{"operationId":"deleteProjectsJobsJobid","summary":"Delete job","description":"Deletes the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","job"]},"v1-projects--projectId--jobs--jobId--branches-get":{"operationId":"getProjectsJobsJobidBranches","summary":"Get job branches","description":"Gets information about the branches of the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the job's available branches.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"branches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the branch.","example":"main"},"id":{"type":"string","example":"MDM6UmVmMzA0MDU5MzM0OnJlZnMvaGVhZHMvbWFpbg="},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"SHA identifier of the commit.","example":"f8aca180e989be62cba71db629d2ede05f2d10c4"},"author":{"type":"object","properties":{"login":{"type":"string","description":"The login of the commit author.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the commit author."},"message":{"type":"string","description":"Commit message of the commit.","example":"Initial commit"},"date":{"type":"string","format":"date-time","description":"Timestamp of the commit.","example":"2021-09-17T14:04:39.000Z"}},"required":["sha","author"],"additionalProperties":false,"description":"Details about the most recent commit on the branch."}},"required":["name","id","commit"],"additionalProperties":false,"description":"Details about a branch."},"description":"A list of branches for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","branches"]},"v1-projects--projectId--jobs--jobId--branches-get-team-scoped":{"operationId":"getProjectsJobsJobidBranches","summary":"Get job branches","description":"Gets information about the branches of the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the job's available branches.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"branches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the branch.","example":"main"},"id":{"type":"string","example":"MDM6UmVmMzA0MDU5MzM0OnJlZnMvaGVhZHMvbWFpbg="},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"SHA identifier of the commit.","example":"f8aca180e989be62cba71db629d2ede05f2d10c4"},"author":{"type":"object","properties":{"login":{"type":"string","description":"The login of the commit author.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the commit author."},"message":{"type":"string","description":"Commit message of the commit.","example":"Initial commit"},"date":{"type":"string","format":"date-time","description":"Timestamp of the commit.","example":"2021-09-17T14:04:39.000Z"}},"required":["sha","author"],"additionalProperties":false,"description":"Details about the most recent commit on the branch."}},"required":["name","id","commit"],"additionalProperties":false,"description":"Details about a branch."},"description":"A list of branches for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","branches"]},"v1-projects--projectId--jobs--jobId--build-get":{"operationId":"getProjectsJobsJobidBuild","summary":"List job builds","description":"Lists builds for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Returns a list of builds for the given job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"builds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false},"description":"An array of builds."}},"required":["builds"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","builds"]},"v1-projects--projectId--jobs--jobId--build-get-team-scoped":{"operationId":"getProjectsJobsJobidBuild","summary":"List job builds","description":"Lists builds for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Returns a list of builds for the given job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"builds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false},"description":"An array of builds."}},"required":["builds"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","builds"]},"v1-projects--projectId--jobs--jobId--build-post":{"operationId":"postProjectsJobsJobidBuild","summary":"Start job build","description":"Start a new build for the given job. Given a commit sha, it will build that commit.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Returns data about the build initiated","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"status":{"type":"string","description":"The status of the build.","example":"PENDING"},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":false}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"sha":{"type":"string","minLength":40,"maxLength":40,"description":"Commit sha to build. If not provided, will build the most recent commit of the job's branch.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"}},"additionalProperties":false,"description":"Start a build with the current settings"},{"type":"object","properties":{"sha":{"type":"string","minLength":40,"maxLength":40,"description":"Commit sha to build. If not provided, will build the most recent commit of the job's branch.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"},"overrides":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Build arguments that will be set on this build only. In case of conflicts these values take precedence.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"docker":{"type":"object","properties":{"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileTarget":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerfileContents":{"type":"string","minLength":1,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."}},"additionalProperties":false,"description":"Overrides for docker build settings."}},"additionalProperties":false,"description":"An optional object that may specify several different overrides on the build level."}},"additionalProperties":false,"description":"Start a build with overrides for the current settings"}],"description":"Start a job build"}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["start","job","build"]},"v1-projects--projectId--jobs--jobId--build-post-team-scoped":{"operationId":"postProjectsJobsJobidBuild","summary":"Start job build","description":"Start a new build for the given job. Given a commit sha, it will build that commit.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Returns data about the build initiated","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"status":{"type":"string","description":"The status of the build.","example":"PENDING"},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":false}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"sha":{"type":"string","minLength":40,"maxLength":40,"description":"Commit sha to build. If not provided, will build the most recent commit of the job's branch.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"}},"additionalProperties":false,"description":"Start a build with the current settings"},{"type":"object","properties":{"sha":{"type":"string","minLength":40,"maxLength":40,"description":"Commit sha to build. If not provided, will build the most recent commit of the job's branch.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"},"overrides":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Build arguments that will be set on this build only. In case of conflicts these values take precedence.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"docker":{"type":"object","properties":{"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileTarget":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerfileContents":{"type":"string","minLength":1,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."}},"additionalProperties":false,"description":"Overrides for docker build settings."}},"additionalProperties":false,"description":"An optional object that may specify several different overrides on the build level."}},"additionalProperties":false,"description":"Start a build with overrides for the current settings"}],"description":"Start a job build"}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["start","job","build"]},"v1-projects--projectId--jobs--jobId--build-arguments-get":{"operationId":"getProjectsJobsJobidBuildArguments","summary":"Get job build arguments","description":"Gets the build arguments of the given job. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The build arguments for the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":false,"description":"The build arguments, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The build secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-arguments"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--build-arguments-get-team-scoped":{"operationId":"getProjectsJobsJobidBuildArguments","summary":"Get job build arguments","description":"Gets the build arguments of the given job. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The build arguments for the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":false,"description":"The build arguments, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The build secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-arguments"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--build-arguments-post":{"operationId":"postProjectsJobsJobidBuildArguments","summary":"Edit job build arguments","description":"Sets build arguments for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Jobs > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","build-arguments"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--build-arguments-post-team-scoped":{"operationId":"postProjectsJobsJobidBuildArguments","summary":"Edit job build arguments","description":"Sets build arguments for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Jobs > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","build-arguments"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--build-arguments-details-get":{"operationId":"getProjectsJobsJobidBuildArgumentsDetails","summary":"Get job build argument details","description":"Get details about the build arguments accessible by the given job. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details of the build arguments of the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"buildFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-argument-details"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--build-arguments-details-get-team-scoped":{"operationId":"getProjectsJobsJobidBuildArgumentsDetails","summary":"Get job build argument details","description":"Get details about the build arguments accessible by the given job. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details of the build arguments of the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"buildFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-argument-details"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--build-logs-get":{"operationId":"getProjectsJobsJobidBuildLogs","summary":"Get job build logs","description":"Get logs for a job build","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query","schema":{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-logs"]},"v1-projects--projectId--jobs--jobId--build-logs-get-team-scoped":{"operationId":"getProjectsJobsJobidBuildLogs","summary":"Get job build logs","description":"Get logs for a job build","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query","schema":{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-logs"]},"v1-projects--projectId--jobs--jobId--build-metrics-get":{"operationId":"getProjectsJobsJobidBuildMetrics","summary":"Get job build metrics","description":"Get metrics for a job build","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query","schema":{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","job","build-metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","job","build-metrics"]}],"x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-metrics"]},"v1-projects--projectId--jobs--jobId--build-metrics-get-team-scoped":{"operationId":"getProjectsJobsJobidBuildMetrics","summary":"Get job build metrics","description":"Get metrics for a job build","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query","schema":{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","job","build-metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","job","build-metrics"]}],"x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build-metrics"]},"v1-projects--projectId--jobs--jobId--build-options-post":{"operationId":"postProjectsJobsJobidBuildOptions","summary":"Update job build options","description":"Updates the build options for a given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"dockerfile":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB."},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"integer","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"},{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"Don't modify build type settings"}],"description":"Update job build settings"}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","build-options"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--build-options-post-team-scoped":{"operationId":"postProjectsJobsJobidBuildOptions","summary":"Update job build options","description":"Updates the build options for a given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"dockerfile":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB."},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"integer","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"},{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"Don't modify build type settings"}],"description":"Update job build settings"}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","build-options"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--build-source-post":{"operationId":"postProjectsJobsJobidBuildSource","summary":"Update job build source","description":"Updates the version control source for a given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","build-source"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--build-source-post-team-scoped":{"operationId":"postProjectsJobsJobidBuildSource","summary":"Update job build source","description":"Updates the version control source for a given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","build-source"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--build--buildId--get":{"operationId":"getProjectsJobsJobidBuildBuildid","summary":"Get job build","description":"Gets information about a build for the job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"Returns data about the specified build.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build"]},"v1-projects--projectId--jobs--jobId--build--buildId--get-team-scoped":{"operationId":"getProjectsJobsJobidBuildBuildid","summary":"Get job build","description":"Gets information about a build for the job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"Returns data about the specified build.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","build"]},"v1-projects--projectId--jobs--jobId--build--buildId--delete":{"operationId":"deleteProjectsJobsJobidBuildBuildid","summary":"Abort job build","description":"Aborts the given job build","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","job","build"]},"v1-projects--projectId--jobs--jobId--build--buildId--delete-team-scoped":{"operationId":"deleteProjectsJobsJobidBuildBuildid","summary":"Abort job build","description":"Aborts the given job build","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the job build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","job","build"]},"v1-projects--projectId--jobs--jobId--containers-get":{"operationId":"getProjectsJobsJobidContainers","summary":"List job containers","description":"Gets a list of containers for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"runId","type":"string","description":"If provided, only returns containers for this specific job run.","example":"00000676-9be8-41dd-b0f7-ba7df935cf27","in":"query","schema":{"name":"runId","type":"string","description":"If provided, only returns containers for this specific job run.","example":"00000676-9be8-41dd-b0f7-ba7df935cf27","in":"query"}}],"responses":{"200":{"description":"Details about the job's containers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the container.","example":"example-service-78b4d4459d-sbtn8"},"createdAt":{"type":"integer","minimum":1,"description":"The timestamp the container was created.","example":1611241087},"status":{"type":"string","enum":["TASK_RUNNING","TASK_STARTING","TASK_STAGING","TASK_KILLING","TASK_KILLED","TASK_FAILED","TASK_FINISHED"],"description":"The current status of the container.","example":"TASK_RUNNING"},"nodeName":{"type":"string","description":"BYOC only: the name of the node the container was scheduled to"},"nodePoolUserId":{"type":"string","description":"BYOC only: the user facing ID of the node pool that the container was scheduled to"},"nodePoolProviderId":{"type":"string","description":"BYOC only: the provider facing ID of the node pool that the container was scheduled to"},"host":{"type":"string","description":"BYOC only: the host address of the node the container was scheduled to"},"ipAddresses":{"type":"array","items":{"type":"string"},"description":"BYOC only: the IP addresses mapping to the container"},"updatedAt":{"type":"integer","minimum":1,"description":"The timestamp the container was last updated.","example":1611241087}},"required":["name","createdAt","status","updatedAt"],"additionalProperties":false,"description":"Data about a container."}},"runId":{"type":"string","description":"The id of the associated job run.","example":"00000676-9be8-41dd-b0f7-ba7df935cf27"}},"required":["runId"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","containers"]},"v1-projects--projectId--jobs--jobId--containers-get-team-scoped":{"operationId":"getProjectsJobsJobidContainers","summary":"List job containers","description":"Gets a list of containers for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"runId","type":"string","description":"If provided, only returns containers for this specific job run.","example":"00000676-9be8-41dd-b0f7-ba7df935cf27","in":"query","schema":{"name":"runId","type":"string","description":"If provided, only returns containers for this specific job run.","example":"00000676-9be8-41dd-b0f7-ba7df935cf27","in":"query"}}],"responses":{"200":{"description":"Details about the job's containers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the container.","example":"example-service-78b4d4459d-sbtn8"},"createdAt":{"type":"integer","minimum":1,"description":"The timestamp the container was created.","example":1611241087},"status":{"type":"string","enum":["TASK_RUNNING","TASK_STARTING","TASK_STAGING","TASK_KILLING","TASK_KILLED","TASK_FAILED","TASK_FINISHED"],"description":"The current status of the container.","example":"TASK_RUNNING"},"nodeName":{"type":"string","description":"BYOC only: the name of the node the container was scheduled to"},"nodePoolUserId":{"type":"string","description":"BYOC only: the user facing ID of the node pool that the container was scheduled to"},"nodePoolProviderId":{"type":"string","description":"BYOC only: the provider facing ID of the node pool that the container was scheduled to"},"host":{"type":"string","description":"BYOC only: the host address of the node the container was scheduled to"},"ipAddresses":{"type":"array","items":{"type":"string"},"description":"BYOC only: the IP addresses mapping to the container"},"updatedAt":{"type":"integer","minimum":1,"description":"The timestamp the container was last updated.","example":1611241087}},"required":["name","createdAt","status","updatedAt"],"additionalProperties":false,"description":"Data about a container."}},"runId":{"type":"string","description":"The id of the associated job run.","example":"00000676-9be8-41dd-b0f7-ba7df935cf27"}},"required":["runId"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","containers"]},"v1-projects--projectId--jobs--jobId--deployment-get":{"operationId":"getProjectsJobsJobidDeployment","summary":"Get job deployment","description":"Gets information about the deployment of the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Data about the job deployment.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"internal":{"type":"object","properties":{"appId":{"type":"string","description":"Full identifier of deployed entity","example":"/example-user/default-project/example-service"},"nfObjectId":{"type":"string","description":"ID of deployed entity","example":"example-service"},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"repository":{"type":"string","description":"URL of the Git repository being deployed","example":"https://github.com/northflank/gatsby-with-northflank"},"branch":{"type":"string","description":"Branch or source label of the build being deployed","example":"master"},"buildId":{"type":"string","description":"ID of the build currently deployed.","example":"incredible-land-3266"},"buildSHA":{"type":"string","description":"Revision being deployed. `latest` deploys the latest matching build.","example":"latest"},"deployedSHA":{"type":"string","description":"Currently deployed commit SHA. If buildSHA is set to `latest`, this will show the SHA of the latest commit.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"},"nfObjectType":{"type":"string","enum":["service","job"],"description":"Type of deployed entity","example":"service"}},"required":["appId","nfObjectId","branch","buildId","buildSHA","nfObjectType"],"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Job deploying a Northflank entity","x-required":true},{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"external":{"type":"object","properties":{"imagePath":{"type":"string","description":"Path of the external image excluding the hostname","example":"nginx:latest"},"registryProvider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"Registry provider hosting the external image","example":"dockerhub"},"privateImage":{"type":"boolean","description":"Does the image require authentication","example":false}},"required":["imagePath","registryProvider","privateImage"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Service deploying an external image","x-required":true}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","deployment"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--deployment-get-team-scoped":{"operationId":"getProjectsJobsJobidDeployment","summary":"Get job deployment","description":"Gets information about the deployment of the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Data about the job deployment.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"internal":{"type":"object","properties":{"appId":{"type":"string","description":"Full identifier of deployed entity","example":"/example-user/default-project/example-service"},"nfObjectId":{"type":"string","description":"ID of deployed entity","example":"example-service"},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"repository":{"type":"string","description":"URL of the Git repository being deployed","example":"https://github.com/northflank/gatsby-with-northflank"},"branch":{"type":"string","description":"Branch or source label of the build being deployed","example":"master"},"buildId":{"type":"string","description":"ID of the build currently deployed.","example":"incredible-land-3266"},"buildSHA":{"type":"string","description":"Revision being deployed. `latest` deploys the latest matching build.","example":"latest"},"deployedSHA":{"type":"string","description":"Currently deployed commit SHA. If buildSHA is set to `latest`, this will show the SHA of the latest commit.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"},"nfObjectType":{"type":"string","enum":["service","job"],"description":"Type of deployed entity","example":"service"}},"required":["appId","nfObjectId","branch","buildId","buildSHA","nfObjectType"],"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Job deploying a Northflank entity","x-required":true},{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"external":{"type":"object","properties":{"imagePath":{"type":"string","description":"Path of the external image excluding the hostname","example":"nginx:latest"},"registryProvider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"Registry provider hosting the external image","example":"dockerhub"},"privateImage":{"type":"boolean","description":"Does the image require authentication","example":false}},"required":["imagePath","registryProvider","privateImage"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Service deploying an external image","x-required":true}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","deployment"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--deployment-post":{"operationId":"postProjectsJobsJobidDeployment","summary":"Update job deployment","description":"Updates the deployment settings of the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["external"],"additionalProperties":false,"description":"An external deployment"},{"type":"object","properties":{"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["internal"],"additionalProperties":false,"description":"An internal deployment"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"additionalProperties":false,"description":"Don't modify the deployment."}],"description":"Deployment type"}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","deployment"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--deployment-post-team-scoped":{"operationId":"postProjectsJobsJobidDeployment","summary":"Update job deployment","description":"Updates the deployment settings of the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["external"],"additionalProperties":false,"description":"An external deployment"},{"type":"object","properties":{"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["internal"],"additionalProperties":false,"description":"An internal deployment"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"additionalProperties":false,"description":"Don't modify the deployment."}],"description":"Deployment type"}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","deployment"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--health-checks-get":{"operationId":"getProjectsJobsJobidHealthChecks","summary":"Get job health checks","description":"Lists the health checks for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the health checks for the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","nullable":true,"description":"The path of the health check endpoint.","example":"/health-check"},"cmd":{"description":"The command to run for the health check."},"httpPort":{"description":"HTTP port number for the health check endpoint.","example":3000},"tcpSocketPort":{"description":"TCP port number for the health check endpoint."},"initialDelaySeconds":{"type":"integer","minimum":1,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":1,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","health-checks"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--health-checks-get-team-scoped":{"operationId":"getProjectsJobsJobidHealthChecks","summary":"Get job health checks","description":"Lists the health checks for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the health checks for the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","nullable":true,"description":"The path of the health check endpoint.","example":"/health-check"},"cmd":{"description":"The command to run for the health check."},"httpPort":{"description":"HTTP port number for the health check endpoint.","example":3000},"tcpSocketPort":{"description":"TCP port number for the health check endpoint."},"initialDelaySeconds":{"type":"integer","minimum":1,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":1,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","health-checks"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--health-checks-post":{"operationId":"postProjectsJobsJobidHealthChecks","summary":"Update job health checks","description":"Updates health checks for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","health-checks"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--health-checks-post-team-scoped":{"operationId":"postProjectsJobsJobidHealthChecks","summary":"Update job health checks","description":"Updates health checks for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","health-checks"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--logs-get":{"operationId":"getProjectsJobsJobidLogs","summary":"Get job logs","description":"Get logs for a job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","in":"query","schema":{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","in":"query"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","logs"]},"v1-projects--projectId--jobs--jobId--logs-get-team-scoped":{"operationId":"getProjectsJobsJobidLogs","summary":"Get job logs","description":"Get logs for a job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","in":"query","schema":{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","in":"query"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","logs"]},"v1-projects--projectId--jobs--jobId--metrics-get":{"operationId":"getProjectsJobsJobidMetrics","summary":"Get job metrics","description":"Get metrics for a job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","examples":["93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"],"in":"query","schema":{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","examples":["93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"],"in":"query"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"runId":{"type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"},"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","job","metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"runId":{"type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"},"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","job","metrics"]}],"x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","metrics"]},"v1-projects--projectId--jobs--jobId--metrics-get-team-scoped":{"operationId":"getProjectsJobsJobidMetrics","summary":"Get job metrics","description":"Get metrics for a job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","examples":["93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"],"in":"query","schema":{"name":"runId","type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","examples":["93ec9390-b9bd-47f0-9bd1-b5983c42a6f2","93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"],"in":"query"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"runId":{"type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"},"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","job","metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"runId":{"type":"string","minLength":36,"maxLength":36,"description":"Limits metrics to a specific job run id.","example":"93ec9390-b9bd-47f0-9bd1-b5983c42a6f2"},"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","job","metrics"]}],"x-nf-permission-required":"Project > Jobs > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","metrics"]},"v1-projects--projectId--jobs--jobId--pause-post":{"operationId":"postProjectsJobsJobidPause","summary":"Pause job","description":"Pause the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","job"]},"v1-projects--projectId--jobs--jobId--pause-post-team-scoped":{"operationId":"postProjectsJobsJobidPause","summary":"Pause job","description":"Pause the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","job"]},"v1-projects--projectId--jobs--jobId--pull-requests-get":{"operationId":"getProjectsJobsJobidPullRequests","summary":"Get job pull requests","description":"Gets information about the pull-requests of the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the job's available pull requests.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pullRequests":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"Provider identifier of the pull request.","example":1},"state":{"type":"string","description":"Status of the pull request.","example":"OPEN"},"title":{"type":"string","description":"Title of the pull request.","example":"Add new feature handling"},"source":{"type":"string","description":"Name of the branch the pull request is merging from.","example":"feature/new-feature"},"destination":{"type":"string","description":"Name of the branch the pull request is being merged into.","example":"main"},"sha":{"type":"string","description":"SHA of the most recent commit of the pull request.","example":"4f101d8821aeb3e4f81f95f3e886a2759ba7b9db"},"created_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was opened.","example":"2021-03-22T11:05:52.000Z"},"updated_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was last updated at.","example":"2021-05-11T16:05:43.000Z"},"html_url":{"type":"string"}},"required":["id","state","title","source","destination","sha","created_at","updated_at","html_url"],"additionalProperties":false,"description":"Details about a pull request."},"description":"A list of pull requests for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","pull-requests"]},"v1-projects--projectId--jobs--jobId--pull-requests-get-team-scoped":{"operationId":"getProjectsJobsJobidPullRequests","summary":"Get job pull requests","description":"Gets information about the pull-requests of the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the job's available pull requests.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pullRequests":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"Provider identifier of the pull request.","example":1},"state":{"type":"string","description":"Status of the pull request.","example":"OPEN"},"title":{"type":"string","description":"Title of the pull request.","example":"Add new feature handling"},"source":{"type":"string","description":"Name of the branch the pull request is merging from.","example":"feature/new-feature"},"destination":{"type":"string","description":"Name of the branch the pull request is being merged into.","example":"main"},"sha":{"type":"string","description":"SHA of the most recent commit of the pull request.","example":"4f101d8821aeb3e4f81f95f3e886a2759ba7b9db"},"created_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was opened.","example":"2021-03-22T11:05:52.000Z"},"updated_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was last updated at.","example":"2021-05-11T16:05:43.000Z"},"html_url":{"type":"string"}},"required":["id","state","title","source","destination","sha","created_at","updated_at","html_url"],"additionalProperties":false,"description":"Details about a pull request."},"description":"A list of pull requests for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","pull-requests"]},"v1-projects--projectId--jobs--jobId--resume-post":{"operationId":"postProjectsJobsJobidResume","summary":"Resume job","description":"Resumes the given job. Optionally takes several arguments to override resumed settings.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The job could not be resumed as it is not paused."}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"suspended":{"type":"boolean","description":"In the case of cron jobs, whether scheduling should be paused.","example":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether CD should be disabled","example":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","job"]},"v1-projects--projectId--jobs--jobId--resume-post-team-scoped":{"operationId":"postProjectsJobsJobidResume","summary":"Resume job","description":"Resumes the given job. Optionally takes several arguments to override resumed settings.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The job could not be resumed as it is not paused."}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"suspended":{"type":"boolean","description":"In the case of cron jobs, whether scheduling should be paused.","example":false},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether CD should be disabled","example":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","job"]},"v1-projects--projectId--jobs--jobId--runs-get":{"operationId":"getProjectsJobsJobidRuns","summary":"Get job runs","description":"Fetches run history for the given job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723"},"active":{"type":"integer","enum":[0,1],"description":"Whether the run is currently in progress","example":0},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to retry this job run before it is marked as failed.","example":0},"completions":{"type":"integer","minimum":0,"description":"The number of times this job run has concluded successfully or with an error.","example":1},"concluded":{"type":"boolean","description":"Has the job run finished?","example":true},"failed":{"type":"integer","enum":[0,1],"description":"Whether this job run failed to complete successfully","example":0},"runName":{"type":"string","description":"The name of the job run","example":"example-job-5fcf67bc56e1913e21d49504"},"status":{"type":"string","enum":["SUCCESS","RUNNING","FAILED"],"description":"A string representing the status of the job. Either SUCCESS, RUNNING or FAILED","example":"SUCCESS"},"succeeded":{"type":"integer","enum":[0,1],"description":"Whether this job run completed successfully","example":0},"startedAt":{"type":"string","description":"The timestamp when the job run started.","example":"2020-12-08T11:47:08Z"},"concludedAt":{"type":"string","description":"The timestamp when the job run concluded.","example":"2020-12-08T11:52:08Z"}},"required":["id","active","backoffLimit","completions","concluded","failed","runName","status","succeeded","startedAt","concludedAt"],"additionalProperties":false},"description":"An array of job run objects."}},"required":["runs"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","runs"]},"v1-projects--projectId--jobs--jobId--runs-get-team-scoped":{"operationId":"getProjectsJobsJobidRuns","summary":"Get job runs","description":"Fetches run history for the given job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723"},"active":{"type":"integer","enum":[0,1],"description":"Whether the run is currently in progress","example":0},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to retry this job run before it is marked as failed.","example":0},"completions":{"type":"integer","minimum":0,"description":"The number of times this job run has concluded successfully or with an error.","example":1},"concluded":{"type":"boolean","description":"Has the job run finished?","example":true},"failed":{"type":"integer","enum":[0,1],"description":"Whether this job run failed to complete successfully","example":0},"runName":{"type":"string","description":"The name of the job run","example":"example-job-5fcf67bc56e1913e21d49504"},"status":{"type":"string","enum":["SUCCESS","RUNNING","FAILED"],"description":"A string representing the status of the job. Either SUCCESS, RUNNING or FAILED","example":"SUCCESS"},"succeeded":{"type":"integer","enum":[0,1],"description":"Whether this job run completed successfully","example":0},"startedAt":{"type":"string","description":"The timestamp when the job run started.","example":"2020-12-08T11:47:08Z"},"concludedAt":{"type":"string","description":"The timestamp when the job run concluded.","example":"2020-12-08T11:52:08Z"}},"required":["id","active","backoffLimit","completions","concluded","failed","runName","status","succeeded","startedAt","concludedAt"],"additionalProperties":false},"description":"An array of job run objects."}},"required":["runs"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","runs"]},"v1-projects--projectId--jobs--jobId--runs-post":{"operationId":"postProjectsJobsJobidRuns","summary":"Run job","description":"Starts a new job run for the given job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the new job run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723"},"runName":{"type":"string","description":"The name of the job run","example":"example-job-5fcf67bc56e1913e21d49504"}},"required":["id","runName"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the environment variables overrides to use when running the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan override to use.","example":"nf-compute-20"}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false,"description":"GPU configuration overrides to use for this run. Set `enabled` to `false` to run without GPUs."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false,"description":"Optional: Specify the commit to run"}},"additionalProperties":false,"description":"Optional: Override the run to use a previously built commit"},{"type":"object","properties":{"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false,"description":"GPU configuration overrides to use for this run. Set `enabled` to `false` to run without GPUs."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false,"description":"Optional: Specify the external image to run"}},"additionalProperties":false,"description":"Optional: Override the run to use an external image"}],"description":"Override the job run deployment source."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Run Job","x-nf-team-scoped":true,"x-nf-cli-command":["start","job","run"]},"v1-projects--projectId--jobs--jobId--runs-post-team-scoped":{"operationId":"postProjectsJobsJobidRuns","summary":"Run job","description":"Starts a new job run for the given job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details about the new job run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723"},"runName":{"type":"string","description":"The name of the job run","example":"example-job-5fcf67bc56e1913e21d49504"}},"required":["id","runName"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the environment variables overrides to use when running the job. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan override to use.","example":"nf-compute-20"}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false,"description":"GPU configuration overrides to use for this run. Set `enabled` to `false` to run without GPUs."},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false,"description":"Optional: Specify the commit to run"}},"additionalProperties":false,"description":"Optional: Override the run to use a previously built commit"},{"type":"object","properties":{"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false,"description":"GPU configuration overrides to use for this run. Set `enabled` to `false` to run without GPUs."},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false,"description":"Optional: Specify the external image to run"}},"additionalProperties":false,"description":"Optional: Override the run to use an external image"}],"description":"Override the job run deployment source."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Run Job","x-nf-team-scoped":true,"x-nf-cli-command":["start","job","run"]},"v1-projects--projectId--jobs--jobId--runs--runId--get":{"operationId":"getProjectsJobsJobidRunsRunid","summary":"Get run details","description":"Returns data about the given job run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path"}}],"responses":{"200":{"description":"Details about the given job run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723"},"active":{"type":"integer","enum":[0,1],"description":"Whether the run is currently in progress","example":0},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to retry this job run before it is marked as failed.","example":0},"completions":{"type":"integer","minimum":0,"description":"The number of times this job run has concluded successfully or with an error.","example":1},"concluded":{"type":"boolean","description":"Has the job run finished?","example":true},"failed":{"type":"integer","enum":[0,1],"description":"Whether this job run failed to complete successfully","example":0},"runName":{"type":"string","description":"The name of the job run","example":"example-job-5fcf67bc56e1913e21d49504"},"status":{"type":"string","enum":["SUCCESS","RUNNING","FAILED"],"description":"A string representing the status of the job. Either SUCCESS, RUNNING or FAILED","example":"SUCCESS"},"succeeded":{"type":"integer","enum":[0,1],"description":"Whether this job run completed successfully","example":0},"startedAt":{"type":"string","description":"The timestamp when the job run started.","example":"2020-12-08T11:47:08Z"},"concludedAt":{"type":"string","description":"The timestamp when the job run concluded.","example":"2020-12-08T11:52:08Z"}},"required":["id","active","backoffLimit","completions","concluded","failed","runName","status","succeeded","startedAt","concludedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","run"]},"v1-projects--projectId--jobs--jobId--runs--runId--get-team-scoped":{"operationId":"getProjectsJobsJobidRunsRunid","summary":"Get run details","description":"Returns data about the given job run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path"}}],"responses":{"200":{"description":"Details about the given job run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723"},"active":{"type":"integer","enum":[0,1],"description":"Whether the run is currently in progress","example":0},"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to retry this job run before it is marked as failed.","example":0},"completions":{"type":"integer","minimum":0,"description":"The number of times this job run has concluded successfully or with an error.","example":1},"concluded":{"type":"boolean","description":"Has the job run finished?","example":true},"failed":{"type":"integer","enum":[0,1],"description":"Whether this job run failed to complete successfully","example":0},"runName":{"type":"string","description":"The name of the job run","example":"example-job-5fcf67bc56e1913e21d49504"},"status":{"type":"string","enum":["SUCCESS","RUNNING","FAILED"],"description":"A string representing the status of the job. Either SUCCESS, RUNNING or FAILED","example":"SUCCESS"},"succeeded":{"type":"integer","enum":[0,1],"description":"Whether this job run completed successfully","example":0},"startedAt":{"type":"string","description":"The timestamp when the job run started.","example":"2020-12-08T11:47:08Z"},"concludedAt":{"type":"string","description":"The timestamp when the job run concluded.","example":"2020-12-08T11:52:08Z"}},"required":["id","active","backoffLimit","completions","concluded","failed","runName","status","succeeded","startedAt","concludedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","run"]},"v1-projects--projectId--jobs--jobId--runs--runId--delete":{"operationId":"deleteProjectsJobsJobidRunsRunid","summary":"Abort job run","description":"Aborts the given job run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","job","run"]},"v1-projects--projectId--jobs--jobId--runs--runId--delete-team-scoped":{"operationId":"deleteProjectsJobsJobidRunsRunid","summary":"Abort job run","description":"Aborts the given job run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the job run","example":"d34582a4-35bd-4c71-8e7c-e36999b88723","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","job","run"]},"v1-projects--projectId--jobs--jobId--runtime-environment-get":{"operationId":"getProjectsJobsJobidRuntimeEnvironment","summary":"Get job runtime environment","description":"Returns the runtime environment for the given job. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The runtime environment of the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime environment variables, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","runtime-environment"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--runtime-environment-get-team-scoped":{"operationId":"getProjectsJobsJobidRuntimeEnvironment","summary":"Get job runtime environment","description":"Returns the runtime environment for the given job. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The runtime environment of the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime environment variables, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","runtime-environment"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--runtime-environment-post":{"operationId":"postProjectsJobsJobidRuntimeEnvironment","summary":"Edit job runtime environment","description":"Sets the runtime environment for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the environment variables to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Jobs > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","runtime-environment"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--runtime-environment-post-team-scoped":{"operationId":"postProjectsJobsJobidRuntimeEnvironment","summary":"Edit job runtime environment","description":"Sets the runtime environment for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the environment variables to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Jobs > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","runtime-environment"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--runtime-environment-details-get":{"operationId":"getProjectsJobsJobidRuntimeEnvironmentDetails","summary":"Get job runtime environment details","description":"Get details about the runtime environment accessible by the given job. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details of the runtime environment of the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"runtimeFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","runtime-environment-details"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--runtime-environment-details-get-team-scoped":{"operationId":"getProjectsJobsJobidRuntimeEnvironmentDetails","summary":"Get job runtime environment details","description":"Get details about the runtime environment accessible by the given job. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"Details of the runtime environment of the job.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"runtimeFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Jobs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","job","runtime-environment-details"],"x-nf-deprecation-replacement":"/jobs/get-job","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--jobs--jobId--scale-post":{"operationId":"postProjectsJobsJobidScale","summary":"Scale job","description":"Modifies the scaling settings for the given job.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"ID of the deployment plan to switch to.","example":"nf-compute-20"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["scale","job"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--scale-post-team-scoped":{"operationId":"postProjectsJobsJobidScale","summary":"Scale job","description":"Modifies the scaling settings for the given job.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"ID of the deployment plan to switch to.","example":"nf-compute-20"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["scale","job"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--settings-post":{"operationId":"postProjectsJobsJobidSettings","summary":"Update job settings","description":"Updates settings for the job","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","description":"The cron timer scheduling when to run the job. Required for cron jobs and unavailable for other job types.","example":"30 8 * * *"},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. Only available for cron jobs. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"allow"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","settings"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--settings-post-team-scoped":{"operationId":"postProjectsJobsJobidSettings","summary":"Update job settings","description":"Updates settings for the job","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"backoffLimit":{"type":"integer","minimum":0,"description":"The number of attempts to rerun a job before it is marked as failed.","example":0},"runOnSourceChange":{"type":"string","enum":["never","cd-promote","always"],"description":"Configure when the job should be run if the source image changes.","example":"never"},"activeDeadlineSeconds":{"type":"integer","minimum":1,"description":"The maximum amount of time, in seconds, for a job to run before it is marked as failed.","example":600},"schedule":{"type":"string","pattern":"(@(annually|yearly|monthly|weekly|daily|hourly))|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ?){5})","description":"The cron timer scheduling when to run the job. Required for cron jobs and unavailable for other job types.","example":"30 8 * * *"},"concurrencyPolicy":{"type":"string","enum":["allow","forbid","replace"],"description":"Whether this job should run when another instance of the job is already running. Only available for cron jobs. `allow` will enable multiple instances of this job to run. `forbid` will keep the current instance of the job running and stop a new instance from being run. `replace` will terminate any currently running instance of the job and start a new one.","example":"allow"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","job","settings"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--suspend-post":{"operationId":"postProjectsJobsJobidSuspend","summary":"Suspend job","description":"Modify cron job to toggle suspending of its schedule.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"Setting can only be modified for cron jobs."}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"suspended":{"type":"boolean","description":"In the case of cron jobs, whether scheduling should be paused.","example":true}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["suspend","job"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--jobs--jobId--suspend-post-team-scoped":{"operationId":"postProjectsJobsJobidSuspend","summary":"Suspend job","description":"Modify cron job to toggle suspending of its schedule.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path","schema":{"name":"jobId","type":"string","required":true,"description":"ID of the job","example":"example-job","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"Setting can only be modified for cron jobs."}},"tags":["Jobs","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"suspended":{"type":"boolean","description":"In the case of cron jobs, whether scheduling should be paused.","example":true}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Jobs > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["suspend","job"],"x-nf-deprecation-replacement":"/jobs/patch-job","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--llm-model-deployments-get":{"operationId":"getProjectsLlmModelDeployments","summary":"List AI models","description":"Lists all AI models for a project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of AI models that belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"llmModelDeployments":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["custom"],"description":"Type of model spec - custom for user-defined configuration"},"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme","default":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"required":["storageSize"],"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"LLM model configuration including engine, architecture, and compute settings"}},"required":["type","configuration"],"additionalProperties":false},"id":{"type":"string","description":"The unique identifier of the AI model."},"projectId":{"type":"string","description":"ID of the project that the AI model belongs to","example":"default-project"},"entityId":{"type":"string","description":"The entity ID (team) this deployment belongs to."},"entityType":{"type":"string","enum":["user","team","org"]},"creatorId":{"type":"string","description":"The user who created this deployment."},"dns":{"type":"object","properties":{"base":{"type":"string","pattern":"^([a-zA-Z0-9-]{2,}\\.){2,}[a-zA-Z]{2,}$"},"zone":{"type":"string"}},"required":["base","zone"],"additionalProperties":false,"description":"DNS configuration for the AI model."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id used to identify the port across requests."},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The name of the port used in the public url and UI."},"internalPort":{"type":"integer","description":"The port number."},"protocol":{"type":"string","description":"The protocol used by the port."},"public":{"type":"boolean","description":"If true, the port is exposed publicly."},"dns":{"type":"string","description":"DNS entry for this port."},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains."}},"required":["id","name","internalPort","protocol","public"],"additionalProperties":false},"description":"An array of ports for the AI model."},"status":{"type":"string","enum":["pending","provisioning","starting","crashed","paused","running","deleting"],"description":"The current status of the AI model."},"deploymentConfiguration":{"type":"object","properties":{"id":{"type":"string","description":"The deployment configuration identifier."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id"],"additionalProperties":false,"description":"Details of the latest deployment configuration."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","spec","id","projectId","entityId","entityType","creatorId","dns","ports","status"],"additionalProperties":false,"description":"An AI model."},"description":"An array of AI models in this project."}},"required":["llmModelDeployments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["AI Models","project"],"security":[],"x-nf-permission-required":"Project > AiModels > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","llm-model-deployments"]},"v1-projects--projectId--llm-model-deployments-get-team-scoped":{"operationId":"getProjectsLlmModelDeployments","summary":"List AI models","description":"Lists all AI models for a project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of AI models that belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"llmModelDeployments":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["custom"],"description":"Type of model spec - custom for user-defined configuration"},"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme","default":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"required":["storageSize"],"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"LLM model configuration including engine, architecture, and compute settings"}},"required":["type","configuration"],"additionalProperties":false},"id":{"type":"string","description":"The unique identifier of the AI model."},"projectId":{"type":"string","description":"ID of the project that the AI model belongs to","example":"default-project"},"entityId":{"type":"string","description":"The entity ID (team) this deployment belongs to."},"entityType":{"type":"string","enum":["user","team","org"]},"creatorId":{"type":"string","description":"The user who created this deployment."},"dns":{"type":"object","properties":{"base":{"type":"string","pattern":"^([a-zA-Z0-9-]{2,}\\.){2,}[a-zA-Z]{2,}$"},"zone":{"type":"string"}},"required":["base","zone"],"additionalProperties":false,"description":"DNS configuration for the AI model."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id used to identify the port across requests."},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The name of the port used in the public url and UI."},"internalPort":{"type":"integer","description":"The port number."},"protocol":{"type":"string","description":"The protocol used by the port."},"public":{"type":"boolean","description":"If true, the port is exposed publicly."},"dns":{"type":"string","description":"DNS entry for this port."},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains."}},"required":["id","name","internalPort","protocol","public"],"additionalProperties":false},"description":"An array of ports for the AI model."},"status":{"type":"string","enum":["pending","provisioning","starting","crashed","paused","running","deleting"],"description":"The current status of the AI model."},"deploymentConfiguration":{"type":"object","properties":{"id":{"type":"string","description":"The deployment configuration identifier."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id"],"additionalProperties":false,"description":"Details of the latest deployment configuration."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","spec","id","projectId","entityId","entityType","creatorId","dns","ports","status"],"additionalProperties":false,"description":"An AI model."},"description":"An array of AI models in this project."}},"required":["llmModelDeployments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["AI Models","project"],"security":[],"x-nf-permission-required":"Project > AiModels > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","llm-model-deployments"]},"v1-projects--projectId--llm-model-deployments-post":{"operationId":"postProjectsLlmModelDeployments","summary":"Create AI model","description":"Create an AI model","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["AI Models","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port."},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number."},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","default":false},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port."},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port."}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["custom"],"description":"Type of model spec - custom for user-defined configuration"},"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme","default":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"required":["storageSize"],"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"LLM model configuration including engine, architecture, and compute settings"}},"required":["type","configuration"],"additionalProperties":false}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > AiModels > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments-post-team-scoped":{"operationId":"postProjectsLlmModelDeployments","summary":"Create AI model","description":"Create an AI model","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["AI Models","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port."},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number."},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","default":false},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port."},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port."}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["custom"],"description":"Type of model spec - custom for user-defined configuration"},"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme","default":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"required":["storageSize"],"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"LLM model configuration including engine, architecture, and compute settings"}},"required":["type","configuration"],"additionalProperties":false}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > AiModels > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--get":{"operationId":"getProjectsLlmModelDeploymentsLlmmodeldeploymentid","summary":"Get AI model","description":"Gets details about an AI model","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path","schema":{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path"}}],"responses":{"200":{"description":"Details about an AI model.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["custom"],"description":"Type of model spec - custom for user-defined configuration"},"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme","default":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"required":["storageSize"],"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"LLM model configuration including engine, architecture, and compute settings"}},"required":["type","configuration"],"additionalProperties":false},"id":{"type":"string","description":"The unique identifier of the AI model."},"projectId":{"type":"string","description":"ID of the project that the AI model belongs to","example":"default-project"},"entityId":{"type":"string","description":"The entity ID (team) this deployment belongs to."},"entityType":{"type":"string","enum":["user","team","org"]},"creatorId":{"type":"string","description":"The user who created this deployment."},"dns":{"type":"object","properties":{"base":{"type":"string","pattern":"^([a-zA-Z0-9-]{2,}\\.){2,}[a-zA-Z]{2,}$"},"zone":{"type":"string"}},"required":["base","zone"],"additionalProperties":false,"description":"DNS configuration for the AI model."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id used to identify the port across requests."},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The name of the port used in the public url and UI."},"internalPort":{"type":"integer","description":"The port number."},"protocol":{"type":"string","description":"The protocol used by the port."},"public":{"type":"boolean","description":"If true, the port is exposed publicly."},"dns":{"type":"string","description":"DNS entry for this port."},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains."}},"required":["id","name","internalPort","protocol","public"],"additionalProperties":false},"description":"An array of ports for the AI model."},"status":{"type":"string","enum":["pending","provisioning","starting","crashed","paused","running","deleting"],"description":"The current status of the AI model."},"deploymentConfiguration":{"type":"object","properties":{"id":{"type":"string","description":"The deployment configuration identifier."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id"],"additionalProperties":false,"description":"Details of the latest deployment configuration."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","spec","id","projectId","entityId","entityType","creatorId","dns","ports","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["AI Models","project"],"security":[],"x-nf-permission-required":"Project > AiModels > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--get-team-scoped":{"operationId":"getProjectsLlmModelDeploymentsLlmmodeldeploymentid","summary":"Get AI model","description":"Gets details about an AI model","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path","schema":{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path"}}],"responses":{"200":{"description":"Details about an AI model.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"type":{"type":"string","enum":["custom"],"description":"Type of model spec - custom for user-defined configuration"},"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme","default":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"required":["storageSize"],"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"LLM model configuration including engine, architecture, and compute settings"}},"required":["type","configuration"],"additionalProperties":false},"id":{"type":"string","description":"The unique identifier of the AI model."},"projectId":{"type":"string","description":"ID of the project that the AI model belongs to","example":"default-project"},"entityId":{"type":"string","description":"The entity ID (team) this deployment belongs to."},"entityType":{"type":"string","enum":["user","team","org"]},"creatorId":{"type":"string","description":"The user who created this deployment."},"dns":{"type":"object","properties":{"base":{"type":"string","pattern":"^([a-zA-Z0-9-]{2,}\\.){2,}[a-zA-Z]{2,}$"},"zone":{"type":"string"}},"required":["base","zone"],"additionalProperties":false,"description":"DNS configuration for the AI model."},"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id used to identify the port across requests."},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The name of the port used in the public url and UI."},"internalPort":{"type":"integer","description":"The port number."},"protocol":{"type":"string","description":"The protocol used by the port."},"public":{"type":"boolean","description":"If true, the port is exposed publicly."},"dns":{"type":"string","description":"DNS entry for this port."},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains."}},"required":["id","name","internalPort","protocol","public"],"additionalProperties":false},"description":"An array of ports for the AI model."},"status":{"type":"string","enum":["pending","provisioning","starting","crashed","paused","running","deleting"],"description":"The current status of the AI model."},"deploymentConfiguration":{"type":"object","properties":{"id":{"type":"string","description":"The deployment configuration identifier."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id"],"additionalProperties":false,"description":"Details of the latest deployment configuration."},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","spec","id","projectId","entityId","entityType","creatorId","dns","ports","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["AI Models","project"],"security":[],"x-nf-permission-required":"Project > AiModels > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--post":{"operationId":"postProjectsLlmModelDeploymentsLlmmodeldeploymentid","summary":"Update AI model","description":"Updates an AI model","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path","schema":{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["AI Models","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port."},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number."},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","default":false},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port."},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port."}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"spec":{"type":"object","properties":{"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > AiModels > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--post-team-scoped":{"operationId":"postProjectsLlmModelDeploymentsLlmmodeldeploymentid","summary":"Update AI model","description":"Updates an AI model","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path","schema":{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["AI Models","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the AI model.","example":"deepseek-v3-deployment"},"description":{"type":"string","pattern":"^[\\s\\S]*$","maxLength":1024,"description":"A description of the AI model.","example":"A deployment for DeepSeek V3 model"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port."},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number."},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","default":false},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port."},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port."}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"spec":{"type":"object","properties":{"configuration":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["vllm"]},"revision":{"type":"string"},"nodeConfiguration":{"type":"object","properties":{"gpu":{"type":"object","properties":{"enabled":{"type":"boolean"},"configuration":{"type":"object","properties":{"gpuType":{"type":"string"},"gpuCount":{"type":"integer","minimum":1},"timesliced":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false},"storage":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteMany"]},"storageClass":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144},"shmSize":{"type":"integer","minimum":0,"nullable":true}},"additionalProperties":false}},"additionalProperties":false},"architecture":{"type":"object","properties":{"type":{"type":"string","enum":["aggregated"]},"workerConfig":{"type":"object","properties":{"replicas":{"type":"integer","minimum":0,"maximum":5},"parallelismConfig":{"type":"object","properties":{"tensorParallelism":{"type":"integer"},"pipelineParallelism":{"type":"integer"},"expertParallelism":{"type":"integer"}},"additionalProperties":false},"sequenceLengthConfig":{"type":"object","properties":{"maxModelLength":{"anyOf":[{"type":"integer","minimum":1,"description":"A fixed maximum context length, in tokens"},{"type":"string","enum":["auto"],"description":"`auto` to derive the maximum context length from the model's config"}],"description":"The maximum model context length (input and output tokens), or `auto` to derive it from the model's config"},"maxInputLength":{"type":"integer","minimum":1},"maxOutputLength":{"type":"integer","minimum":1}},"additionalProperties":false},"batchingConfig":{"type":"object","properties":{"maxNumSeqs":{"type":"integer","minimum":1},"maxNumBatchedTokens":{"type":"integer","minimum":1}},"additionalProperties":false},"enableChunkedPrefill":{"type":"boolean"},"enablePrefixCaching":{"type":"boolean"},"enforceEager":{"type":"boolean"},"enableAsyncScheduling":{"type":"boolean"},"gpuMemoryUtilization":{"type":"number","format":"float","minimum":0.1,"maximum":1},"trustRemoteCode":{"type":"boolean"},"dataType":{"type":"string","enum":["auto","float16","bfloat16"]},"kvCacheDataType":{"type":"string","enum":["fp8","fp8_e5m2","fp8_e4m3"]},"quantization":{"type":"string","enum":["fp8","awq","gptq","int4"]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > AiModels > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--delete":{"operationId":"deleteProjectsLlmModelDeploymentsLlmmodeldeploymentid","summary":"Delete AI model","description":"Delete an AI model","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path","schema":{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["AI Models","project"],"security":[],"x-nf-permission-required":"Project > AiModels > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","llm-model-deployment"]},"v1-projects--projectId--llm-model-deployments--llmModelDeploymentId--delete-team-scoped":{"operationId":"deleteProjectsLlmModelDeploymentsLlmmodeldeploymentid","summary":"Delete AI model","description":"Delete an AI model","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path","schema":{"name":"llmModelDeploymentId","type":"string","required":true,"description":"ID of the AI model","example":"deepseek-v3-deployment","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["AI Models","project"],"security":[],"x-nf-permission-required":"Project > AiModels > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","llm-model-deployment"]},"v1-projects--projectId--pipelines-get":{"operationId":"getProjectsPipelines","summary":"List pipelines","description":"Lists all pipelines for a project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of pipelines belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pipelines":{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the pipeline.","example":"example-pipeline","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the pipeline."}],"description":"The name of the pipeline."},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the pipeline."},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the pipeline."}],"description":"A description of the pipeline."},"id":{"type":"string","description":"Identifier for the pipeline","example":"example-pipeline"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","id"],"additionalProperties":false,"description":"A pipeline."},"description":"An array of pipelines in this project."}},"required":["pipelines"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","pipelines"]},"v1-projects--projectId--pipelines-get-team-scoped":{"operationId":"getProjectsPipelines","summary":"List pipelines","description":"Lists all pipelines for a project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of pipelines belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pipelines":{"type":"array","items":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the pipeline.","example":"example-pipeline","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the pipeline."}],"description":"The name of the pipeline."},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the pipeline."},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the pipeline."}],"description":"A description of the pipeline."},"id":{"type":"string","description":"Identifier for the pipeline","example":"example-pipeline"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","id"],"additionalProperties":false,"description":"A pipeline."},"description":"An array of pipelines in this project."}},"required":["pipelines"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","pipelines"]},"v1-projects--projectId--pipelines--pipelineId--get":{"operationId":"getProjectsPipelinesPipelineid","summary":"Get pipeline","description":"Get details about a pipeline","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}}],"responses":{"200":{"description":"Details about a pipeline.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the pipeline.","example":"example-pipeline","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the pipeline."}],"description":"The name of the pipeline."},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the pipeline."},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the pipeline."}],"description":"A description of the pipeline."},"preview":{"type":"object","properties":{},"additionalProperties":false},"stages":{"type":"array","items":{}},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the service, job or addon to include in the pipeline.","example":"example-service","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the ID of the service, job or addon to include in the pipeline."}],"description":"The ID of the service, job or addon to include in the pipeline."},"type":{"type":"string","enum":["service","job","addon"],"description":"The type of the resource to include in the pipeline.","example":"service"},"stage":{"type":"string","enum":["Development","Staging","Production"],"description":"The stage in the pipeline to include the resource.","example":"Production"}},"required":["id","type","stage"],"additionalProperties":false},"description":"A list of services, jobs and addons to include in the pipeline."}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","pipeline"]},"v1-projects--projectId--pipelines--pipelineId--get-team-scoped":{"operationId":"getProjectsPipelinesPipelineid","summary":"Get pipeline","description":"Get details about a pipeline","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}}],"responses":{"200":{"description":"Details about a pipeline.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the pipeline.","example":"example-pipeline","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the pipeline."}],"description":"The name of the pipeline."},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the pipeline."},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the pipeline."}],"description":"A description of the pipeline."},"preview":{"type":"object","properties":{},"additionalProperties":false},"stages":{"type":"array","items":{}},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the service, job or addon to include in the pipeline.","example":"example-service","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the ID of the service, job or addon to include in the pipeline."}],"description":"The ID of the service, job or addon to include in the pipeline."},"type":{"type":"string","enum":["service","job","addon"],"description":"The type of the resource to include in the pipeline.","example":"service"},"stage":{"type":"string","enum":["Development","Staging","Production"],"description":"The stage in the pipeline to include the resource.","example":"Production"}},"required":["id","type","stage"],"additionalProperties":false},"description":"A list of services, jobs and addons to include in the pipeline."}},"required":["name"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","pipeline"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-get":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvs","summary":"Get preview template","description":"Get information about the given preview template.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the preview template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false},"type":{"type":"string","enum":["git"],"description":"Type of trigger"},"manualOnly":{"type":"boolean","description":"Should the git trigger only be triggered manually?","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeSchema"},"id":{"type":"string","description":"Identifier for the template","example":"example-template"},"paused":{"type":"boolean","description":"Whether triggers are paused for this preview template. If `true`, Git triggers and webhook triggers will not create or update previews.","example":false},"options":{"type":"object","properties":{},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["apiVersion","spec","id","options"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-template"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvs","summary":"Get preview template","description":"Get information about the given preview template.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the preview template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false},"type":{"type":"string","enum":["git"],"description":"Type of trigger"},"manualOnly":{"type":"boolean","description":"Should the git trigger only be triggered manually?","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeSchema"},"id":{"type":"string","description":"Identifier for the template","example":"example-template"},"paused":{"type":"boolean","description":"Whether triggers are paused for this preview template. If `true`, Git triggers and webhook triggers will not create or update previews.","example":false},"options":{"type":"object","properties":{},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["apiVersion","spec","id","options"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-template"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-post":{"operationId":"postProjectsPipelinesPipelineidPreviewEnvs","summary":"Update preview template","description":"Update a given preview template.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeSchema"},"paused":{"type":"boolean","description":"Whether triggers are paused for this preview template. If `true`, Git triggers and webhook triggers will not create or update previews.","example":false},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false},"type":{"type":"string","enum":["git"],"description":"Type of trigger"},"manualOnly":{"type":"boolean","description":"Should the git trigger only be triggered manually?","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"webhook":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether this template can be ran using a webhook endpoint trigger.","example":true},"regenerate":{"type":"boolean","description":"If true, the webhook endpoint will be regenerated if one already exists.","example":false}},"additionalProperties":false}},"required":["apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["update","preview-template"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-post-team-scoped":{"operationId":"postProjectsPipelinesPipelineidPreviewEnvs","summary":"Update preview template","description":"Update a given preview template.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeSchema"},"paused":{"type":"boolean","description":"Whether triggers are paused for this preview template. If `true`, Git triggers and webhook triggers will not create or update previews.","example":false},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false},"type":{"type":"string","enum":["git"],"description":"Type of trigger"},"manualOnly":{"type":"boolean","description":"Should the git trigger only be triggered manually?","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"webhook":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether this template can be ran using a webhook endpoint trigger.","example":true},"regenerate":{"type":"boolean","description":"If true, the webhook endpoint will be regenerated if one already exists.","example":false}},"additionalProperties":false}},"required":["apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["update","preview-template"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-previews-get":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvsPreviews","summary":"List preview environments","description":"Get a list of active preview environments for a template","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of preview environments for the template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"previewEnvironments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the preview template environment","example":"clean-step"},"vcsData":{"type":"object","properties":{"repoUrl":{"type":"string"}},"required":["repoUrl"],"additionalProperties":false,"description":"Data about the version control action that triggered environment creation"},"paused":{"type":"boolean","description":"Whether the preview environment has been paused.","example":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","vcsData"],"additionalProperties":false},"description":"A list of currently available preview environments for the template."}},"required":["previewEnvironments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","pipeline-template-previews"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-previews-get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvsPreviews","summary":"List preview environments","description":"Get a list of active preview environments for a template","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of preview environments for the template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"previewEnvironments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the preview template environment","example":"clean-step"},"vcsData":{"type":"object","properties":{"repoUrl":{"type":"string"}},"required":["repoUrl"],"additionalProperties":false,"description":"Data about the version control action that triggered environment creation"},"paused":{"type":"boolean","description":"Whether the preview environment has been paused.","example":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","vcsData"],"additionalProperties":false},"description":"A list of currently available preview environments for the template."}},"required":["previewEnvironments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","pipeline-template-previews"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-previews--previewId--delete":{"operationId":"deleteProjectsPipelinesPipelineidPreviewEnvsPreviewsPreviewid","summary":"Delete preview environment","description":"Delete a preview environment generated by a preview template.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview environment","example":"different-ray","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview environment","example":"different-ray","in":"path"}},{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query","schema":{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"teardownArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides to pass to the teardown spec when deleting the preview environment."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","pipeline-template-preview"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-previews--previewId--delete-team-scoped":{"operationId":"deleteProjectsPipelinesPipelineidPreviewEnvsPreviewsPreviewid","summary":"Delete preview environment","description":"Delete a preview environment generated by a preview template.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview environment","example":"different-ray","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview environment","example":"different-ray","in":"path"}},{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query","schema":{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"teardownArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides to pass to the teardown spec when deleting the preview environment."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","pipeline-template-preview"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-post":{"operationId":"postProjectsPipelinesPipelineidPreviewEnvsRuns","summary":"Run preview environment","description":"Run the given preview template.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}}],"responses":{"200":{"description":"Details about the preview template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["run","preview-template"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-post-team-scoped":{"operationId":"postProjectsPipelinesPipelineidPreviewEnvsRuns","summary":"Run preview environment","description":"Run the given preview template.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}}],"responses":{"200":{"description":"Details about the preview template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["run","preview-template"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-get":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvsRuns","summary":"List preview template runs","description":"Get a list of preview template runs","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of preview template runs.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"previewTemplateRuns":{"type":"array","items":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure"],"description":"Status of the template run","example":"pending"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["apiVersion","id","templateId","status"],"additionalProperties":false},"description":"An array of template run objects."}},"required":["previewTemplateRuns"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","preview-template-runs"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-runs-get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvsRuns","summary":"List preview template runs","description":"Get a list of preview template runs","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of preview template runs.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"previewTemplateRuns":{"type":"array","items":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure"],"description":"Status of the template run","example":"pending"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["apiVersion","id","templateId","status"],"additionalProperties":false},"description":"An array of template run objects."}},"required":["previewTemplateRuns"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","preview-template-runs"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-runs--templateRunId--get":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvsRunsTemplaterunid","summary":"Get preview template run","description":"Get information about the given preview template run.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path","schema":{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path"}}],"responses":{"200":{"description":"Details about the preview template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false},"type":{"type":"string","enum":["git"],"description":"Type of trigger"},"manualOnly":{"type":"boolean","description":"Should the git trigger only be triggered manually?","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure"],"description":"Status of the template run","example":"pending"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["apiVersion","spec","id","templateId","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-template-run"]},"v1-projects--projectId--pipelines--pipelineId--preview-envs-runs--templateRunId--get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidPreviewEnvsRunsTemplaterunid","summary":"Get preview template run","description":"Get information about the given preview template run.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path","schema":{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path"}}],"responses":{"200":{"description":"Details about the preview template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false},"type":{"type":"string","enum":["git"],"description":"Type of trigger"},"manualOnly":{"type":"boolean","description":"Should the git trigger only be triggered manually?","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure"],"description":"Status of the template run","example":"pending"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["apiVersion","spec","id","templateId","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-template-run"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--get":{"operationId":"getProjectsPipelinesPipelineidReleaseFlowsStage","summary":"Get release flow","description":"Gets details about a release flow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a release flow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the Release Flow template."},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"stage":{"type":"string","description":"The stage of the pipeline this release flow belongs to.","example":"Development"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"paused":{"type":"boolean","description":"Whether triggers are paused for this release flow. If `true`, Git triggers and webhook triggers will not run the release flow.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the template was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the template was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","status","paused","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","release-flow"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidReleaseFlowsStage","summary":"Get release flow","description":"Gets details about a release flow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a release flow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the Release Flow template."},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"stage":{"type":"string","description":"The stage of the pipeline this release flow belongs to.","example":"Development"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"paused":{"type":"boolean","description":"Whether triggers are paused for this release flow. If `true`, Git triggers and webhook triggers will not run the release flow.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the template was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the template was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","status","paused","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","release-flow"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--post":{"operationId":"postProjectsPipelinesPipelineidReleaseFlowsStage","summary":"Update release flow","description":"Updates a release flow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the Release Flow template."},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Pipelines > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","release-flow"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--post-team-scoped":{"operationId":"postProjectsPipelinesPipelineidReleaseFlowsStage","summary":"Update release flow","description":"Updates a release flow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the Release Flow template."},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Pipelines > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","release-flow"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-post":{"operationId":"postProjectsPipelinesPipelineidReleaseFlowsStageRuns","summary":"Run release flow","description":"Runs a given release flow with given arguments. This endpoint can be used as part of a CI pipeline to automatically trigger a release process.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The optional name of the release-flow run.","example":"Example Run"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The optional description of the release-flow run.","example":"This is a description for the release-flow run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'.","example":{"ARG_1":"value"}},"overrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for specific reference values. This should be an object where each key corresponds to a ref defined in the template. The values of each of these keys should also be an object, where each key value pair provided will overwrite the value for that key in the given ref. For example, the value `{ 'example-ref': { 'branch': 'devel' } }` would set the `branch` field to `devel` for the node with ref `example-ref`.","example":{"example-ref":{"branch":"devel"}}},"releaseNodeOverrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for release nodes. This should be an object where each key is the id of a deployment service used in a release node. The value of each of these keys should be also be an object containing the new spec of the release for that deployment service.","example":{"example-service":{"type":"registry","origin":{"imagePath":"nginx:latest"}}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Pipelines > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["run","release-flow"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-post-team-scoped":{"operationId":"postProjectsPipelinesPipelineidReleaseFlowsStageRuns","summary":"Run release flow","description":"Runs a given release flow with given arguments. This endpoint can be used as part of a CI pipeline to automatically trigger a release process.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Pipelines","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The optional name of the release-flow run.","example":"Example Run"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The optional description of the release-flow run.","example":"This is a description for the release-flow run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'.","example":{"ARG_1":"value"}},"overrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for specific reference values. This should be an object where each key corresponds to a ref defined in the template. The values of each of these keys should also be an object, where each key value pair provided will overwrite the value for that key in the given ref. For example, the value `{ 'example-ref': { 'branch': 'devel' } }` would set the `branch` field to `devel` for the node with ref `example-ref`.","example":{"example-ref":{"branch":"devel"}}},"releaseNodeOverrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for release nodes. This should be an object where each key is the id of a deployment service used in a release node. The value of each of these keys should be also be an object containing the new spec of the release for that deployment service.","example":{"example-service":{"type":"registry","origin":{"imagePath":"nginx:latest"}}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Pipelines > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["run","release-flow"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-get":{"operationId":"getProjectsPipelinesPipelineidReleaseFlowsStageRuns","summary":"List release flow runs","description":"Lists runs of a release flow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this release flow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the release flow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the release flow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the release flow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["id","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"A release flow run"}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","release-flow-runs"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs-get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidReleaseFlowsStageRuns","summary":"List release flow runs","description":"Lists runs of a release flow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this release flow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the release flow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the release flow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the release flow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["id","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"A release flow run"}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","release-flow-runs"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--get":{"operationId":"getProjectsPipelinesPipelineidReleaseFlowsStageRunsRunid","summary":"Get release flow run details","description":"Get information about the given release flow run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a release flow run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the release flow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the release flow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the release flow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","release-flow-run"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--get-team-scoped":{"operationId":"getProjectsPipelinesPipelineidReleaseFlowsStageRunsRunid","summary":"Get release flow run details","description":"Get information about the given release flow run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a release flow run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the release flow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the release flow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the release flow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","release-flow-run"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--abort-post":{"operationId":"postProjectsPipelinesPipelineidReleaseFlowsStageRunsRunidAbort","summary":"Abort release flow run","description":"Abort the given release flow run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the aborting run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the release flow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the release flow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the release flow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","release-flow-run"]},"v1-projects--projectId--pipelines--pipelineId--release-flows--stage--runs--runId--abort-post-team-scoped":{"operationId":"postProjectsPipelinesPipelineidReleaseFlowsStageRunsRunidAbort","summary":"Abort release flow run","description":"Abort the given release flow run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path","schema":{"name":"pipelineId","type":"string","required":true,"description":"ID of the pipeline","example":"example-pipeline","in":"path"}},{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path","schema":{"name":"stage","type":"string","required":true,"description":"Stage of the pipeline","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the release flow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the aborting run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the release flow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the release flow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the release flow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Pipelines","project"],"security":[],"x-nf-permission-required":"Project > Pipelines > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","release-flow-run"]},"v1-projects--projectId--preview-blueprints-get":{"operationId":"getProjectsPreviewBlueprints","summary":"List preview blueprints","description":"Lists all preview blueprints for a project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of preview blueprints that belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"workflows":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the preview blueprint","example":"example-workflow"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","id"],"additionalProperties":false,"description":"A preview blueprint."},"description":"An array of preview blueprints in this project."}},"required":["workflows"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","preview-blueprints"]},"v1-projects--projectId--preview-blueprints-get-team-scoped":{"operationId":"getProjectsPreviewBlueprints","summary":"List preview blueprints","description":"Lists all preview blueprints for a project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of preview blueprints that belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"workflows":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the preview blueprint","example":"example-workflow"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","id"],"additionalProperties":false,"description":"A preview blueprint."},"description":"An array of preview blueprints in this project."}},"required":["workflows"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","preview-blueprints"]},"v1-projects--projectId--preview-blueprints-post":{"operationId":"postProjectsPreviewBlueprints","summary":"Create preview blueprint","description":"Create a preview blueprint","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the preview blueprint","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the preview blueprint"}],"description":"The name of the preview blueprint"},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the preview blueprint"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the preview blueprint"}],"description":"A description of the preview blueprint"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","examples":["allow","allow"]},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."},"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","preview-blueprint"]},"v1-projects--projectId--preview-blueprints-post-team-scoped":{"operationId":"postProjectsPreviewBlueprints","summary":"Create preview blueprint","description":"Create a preview blueprint","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the preview blueprint","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the preview blueprint"}],"description":"The name of the preview blueprint"},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the preview blueprint"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the preview blueprint"}],"description":"A description of the preview blueprint"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","examples":["allow","allow"]},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."},"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--get":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintid","summary":"Get preview blueprint","description":"Gets details about a preview blueprint","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a preview blueprint.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the preview blueprint","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the preview blueprint"}],"description":"The name of the preview blueprint"},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the preview blueprint"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the preview blueprint"}],"description":"A description of the preview blueprint"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeSchema"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","examples":["allow","allow"]},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."},"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"paused":{"type":"boolean","description":"Whether triggers are paused for this preview blueprint. If `true`, Git triggers and webhook triggers will not run the preview blueprint.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the template was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the template was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","name","status","paused","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--get-team-scoped":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintid","summary":"Get preview blueprint","description":"Gets details about a preview blueprint","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a preview blueprint.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the preview blueprint","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the preview blueprint"}],"description":"The name of the preview blueprint"},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the preview blueprint"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the preview blueprint"}],"description":"A description of the preview blueprint"},"spec":{"$ref":"#/components/schemas/V1PreviewEnvTemplateNodeSchema"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","examples":["allow","allow"]},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."},"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"paused":{"type":"boolean","description":"Whether triggers are paused for this preview blueprint. If `true`, Git triggers and webhook triggers will not run the preview blueprint.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the template was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the template was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","name","status","paused","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--post":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintid","summary":"Update preview blueprint","description":"Updates a preview blueprint","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the preview blueprint","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the preview blueprint"}],"description":"The name of the preview blueprint"},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the preview blueprint"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the preview blueprint"}],"description":"A description of the preview blueprint"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","examples":["allow","allow"]},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."},"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--post-team-scoped":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintid","summary":"Update preview blueprint","description":"Updates a preview blueprint","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the preview blueprint","x-required":true},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to the name of the preview blueprint"}],"description":"The name of the preview blueprint"},"description":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the preview blueprint"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to a description of the preview blueprint"}],"description":"A description of the preview blueprint"},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","examples":["allow","allow"]},"nameFormat":{"type":"string","description":"The format of the automatically generated preview name. This is a parsed ref string."},"prefixName":{"type":"boolean","description":"If true, the preview name will default to the front of the resource name."},"useBranchContents":{"type":"boolean","description":"If true, and gitops is enabled, the preview will run based on the contents of the branch that triggered it, rather than the set branch."},"schedule":{"type":"object","properties":{"mon":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"tue":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"wed":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"thu":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"fri":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sat":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false},"sun":{"type":"object","properties":{"startTime":{"type":"integer","minimum":0,"maximum":2400},"endTime":{"type":"integer","minimum":0,"maximum":2400}},"additionalProperties":false}},"additionalProperties":false,"description":"Options regarding which hours preview environments should be active. Only available for BYOC projects."},"expiry":{"type":"object","properties":{"previewLifetime":{"type":"integer","minimum":1,"description":"If set, preview environments will be automatically deleted after this many minutes since their last update."},"resetOnUpdate":{"type":"boolean","description":"If `true`, the expiry time for an existing preview will be reset when it is ran again."}},"additionalProperties":false,"description":"Settings regarding the automatic deletion of previews."},"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--delete":{"operationId":"deleteProjectsPreviewBlueprintsPreviewblueprintid","summary":"Delete preview blueprint","description":"Delete a preview blueprint","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--delete-team-scoped":{"operationId":"deleteProjectsPreviewBlueprintsPreviewblueprintid","summary":"Delete preview blueprint","description":"Delete a preview blueprint","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews-get":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintidPreviews","summary":"List preview environments","description":"Get a list of active previews for a preview blueprint.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of previews currently active for the blueprint.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"previewEnvironments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the preview template environment","example":"clean-step"},"vcsData":{"type":"object","properties":{"repoUrl":{"type":"string"}},"required":["repoUrl"],"additionalProperties":false,"description":"Data about the version control action that triggered environment creation"},"paused":{"type":"boolean","description":"Whether the preview environment has been paused.","example":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","vcsData"],"additionalProperties":false},"description":"A list of currently available preview environments for the template."}},"required":["previewEnvironments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","blueprint-template-previews"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews-get-team-scoped":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintidPreviews","summary":"List preview environments","description":"Get a list of active previews for a preview blueprint.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of previews currently active for the blueprint.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"previewEnvironments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the preview template environment","example":"clean-step"},"vcsData":{"type":"object","properties":{"repoUrl":{"type":"string"}},"required":["repoUrl"],"additionalProperties":false,"description":"Data about the version control action that triggered environment creation"},"paused":{"type":"boolean","description":"Whether the preview environment has been paused.","example":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","vcsData"],"additionalProperties":false},"description":"A list of currently available preview environments for the template."}},"required":["previewEnvironments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","blueprint-template-previews"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--delete":{"operationId":"deleteProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewid","summary":"Delete preview environment","description":"Delete a preview environment generated by a preview blueprint.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}},{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query","schema":{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"teardownArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides to pass to the teardown spec when deleting the preview environment."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PipelinesV2 > Previews > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--delete-team-scoped":{"operationId":"deleteProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewid","summary":"Delete preview environment","description":"Delete a preview environment generated by a preview blueprint.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}},{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query","schema":{"name":"skipTeardown","type":"boolean","description":"If `true`, the teardown spec will not be run when deleting the preview environment.","default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"teardownArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides to pass to the teardown spec when deleting the preview environment."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PipelinesV2 > Previews > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--pause-post":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewidPause","summary":"Pause preview environment","description":"Pause a preview environment generated by a preview blueprint.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PipelinesV2 > Previews > Pause","x-nf-team-scoped":true,"x-nf-cli-command":["pause","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--pause-post-team-scoped":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewidPause","summary":"Pause preview environment","description":"Pause a preview environment generated by a preview blueprint.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PipelinesV2 > Previews > Pause","x-nf-team-scoped":true,"x-nf-cli-command":["pause","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--reset-post":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewidReset","summary":"Reset preview environment expiry","description":"Reset the expiry of a preview environment generated by a preview blueprint.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}}],"responses":{"200":{"description":"Response indicating the updated expiry for the preview environment.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"expiryTime":{"type":"string","format":"date-time","description":"The time the preview will expire."}},"required":["expiryTime"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"lifetime":{"type":"integer","minimum":1,"description":"If provided, the preview environment will expire after this amount of time, in minutes."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["reset","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--reset-post-team-scoped":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewidReset","summary":"Reset preview environment expiry","description":"Reset the expiry of a preview environment generated by a preview blueprint.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}}],"responses":{"200":{"description":"Response indicating the updated expiry for the preview environment.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"expiryTime":{"type":"string","format":"date-time","description":"The time the preview will expire."}},"required":["expiryTime"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"lifetime":{"type":"integer","minimum":1,"description":"If provided, the preview environment will expire after this amount of time, in minutes."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["reset","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--resume-post":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewidResume","summary":"Resume preview environment","description":"Resume a preview environment generated by a preview blueprint.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PipelinesV2 > Previews > Resume","x-nf-team-scoped":true,"x-nf-cli-command":["resume","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--previews--previewId--resume-post-team-scoped":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidPreviewsPreviewidResume","summary":"Resume preview environment","description":"Resume a preview environment generated by a preview blueprint.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path","schema":{"name":"previewId","type":"string","required":true,"description":"ID of the preview","example":"example-preview","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PipelinesV2 > Previews > Resume","x-nf-team-scoped":true,"x-nf-cli-command":["resume","blueprint-template-preview"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-post":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidRuns","summary":"Run preview blueprint","description":"Runs a given preview blueprint with given arguments. This endpoint can be used as part of a CI pipeline to automatically create a preview environment.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the newly created preview blueprint run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"},"templateId":{"type":"string","description":"ID of the preview blueprint","example":"example-preview-blueprint"},"environmentId":{"type":"string","description":"ID of the preview environment created by this run","example":"example-preview"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt","templateId"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The optional name of the preview blueprint run.","example":"Example Run"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The optional description of the preview blueprint run.","example":"This is a description for the preview blueprint run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'.","example":{"ARG_1":"value"}},"triggers":{"type":"object","properties":{},"additionalProperties":false,"description":"Values passed in as blueprint triggers. This should be an object where each key corresponds to a trigger ref in the template. The values of each of these keys should also be an object, where each key value pair provided will set the value for that key in the given trigger. For example, the value `{ 'example-trigger': { 'branch': 'devel' } }` would set the `branch` field to `devel` for the trigger with ref `example-trigger`.","example":{"example-trigger":{"branch":"devel"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Start","x-nf-team-scoped":true,"x-nf-cli-command":["run","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-post-team-scoped":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidRuns","summary":"Run preview blueprint","description":"Runs a given preview blueprint with given arguments. This endpoint can be used as part of a CI pipeline to automatically create a preview environment.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the newly created preview blueprint run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"},"templateId":{"type":"string","description":"ID of the preview blueprint","example":"example-preview-blueprint"},"environmentId":{"type":"string","description":"ID of the preview environment created by this run","example":"example-preview"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt","templateId"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The optional name of the preview blueprint run.","example":"Example Run"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The optional description of the preview blueprint run.","example":"This is a description for the preview blueprint run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'.","example":{"ARG_1":"value"}},"triggers":{"type":"object","properties":{},"additionalProperties":false,"description":"Values passed in as blueprint triggers. This should be an object where each key corresponds to a trigger ref in the template. The values of each of these keys should also be an object, where each key value pair provided will set the value for that key in the given trigger. For example, the value `{ 'example-trigger': { 'branch': 'devel' } }` would set the `branch` field to `devel` for the trigger with ref `example-trigger`.","example":{"example-trigger":{"branch":"devel"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Start","x-nf-team-scoped":true,"x-nf-cli-command":["run","preview-blueprint"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-get":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintidRuns","summary":"List preview blueprint runs","description":"Lists runs of a previewBlueprint","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this preview blueprint.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["id","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"A preview blueprint run"}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","preview-blueprint-runs"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs-get-team-scoped":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintidRuns","summary":"List preview blueprint runs","description":"Lists runs of a previewBlueprint","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this preview blueprint.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["id","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"A preview blueprint run"}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","preview-blueprint-runs"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--get":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintidRunsRunid","summary":"Get preview blueprint run details","description":"Get information about the given preview blueprint run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a preview blueprint run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-blueprint-run"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--get-team-scoped":{"operationId":"getProjectsPreviewBlueprintsPreviewblueprintidRunsRunid","summary":"Get preview blueprint run details","description":"Get information about the given preview blueprint run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a preview blueprint run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","preview-blueprint-run"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--abort-post":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidRunsRunidAbort","summary":"Abort preview blueprint run","description":"Abort the given preview blueprint run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the aborting run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Abort","x-nf-team-scoped":true,"x-nf-cli-command":["abort","preview-blueprint-run"]},"v1-projects--projectId--preview-blueprints--previewBlueprintId--runs--runId--abort-post-team-scoped":{"operationId":"postProjectsPreviewBlueprintsPreviewblueprintidRunsRunidAbort","summary":"Abort preview blueprint run","description":"Abort the given preview blueprint run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path","schema":{"name":"previewBlueprintId","type":"string","required":true,"description":"ID of the preview blueprint","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the preview blueprint run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the aborting run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the preview blueprint run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the preview blueprint run","example":"Example run"},"description":{"type":"string","description":"Optional description for the preview blueprint run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Preview Blueprints","project"],"security":[],"x-nf-permission-required":"Project > PreviewBlueprints > Runs > Abort","x-nf-team-scoped":true,"x-nf-cli-command":["abort","preview-blueprint-run"]},"v1-projects--projectId--secrets-get":{"operationId":"getProjectsSecrets","summary":"List project secrets","description":"Gets a list of project secrets belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of secrets.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"projectId":{"type":"string","description":"ID of the project that the secret group belongs to","example":"default-project"},"name":{"type":"string","description":"Secret group name","example":"Example secret group"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the secret group","example":"This is the secret group description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the secret group","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secret groups will be merged","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"}},"required":["id","projectId","name","tags","type","secretType","priority","restrictions"],"additionalProperties":false,"description":"A secret group object"},"description":"An array of secret groups"}},"required":["secrets"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-permission-required":"Project > Secrets > SecretGroups > List","x-nf-team-scoped":true,"x-nf-cli-command":["list","secrets"]},"v1-projects--projectId--secrets-get-team-scoped":{"operationId":"getProjectsSecrets","summary":"List project secrets","description":"Gets a list of project secrets belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of secrets.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"projectId":{"type":"string","description":"ID of the project that the secret group belongs to","example":"default-project"},"name":{"type":"string","description":"Secret group name","example":"Example secret group"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the secret group","example":"This is the secret group description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the secret group","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secret groups will be merged","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"}},"required":["id","projectId","name","tags","type","secretType","priority","restrictions"],"additionalProperties":false,"description":"A secret group object"},"description":"An array of secret groups"}},"required":["secrets"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-permission-required":"Project > Secrets > SecretGroups > List","x-nf-team-scoped":true,"x-nf-cli-command":["list","secrets"]},"v1-projects--projectId--secrets-post":{"operationId":"postProjectsSecrets","summary":"Create project secret","description":"Creates a project secret with the specified payload","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the secret group","example":"example-secret-group"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","secretType","priority","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a secret with the same derived identifier"}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"required":["name","secretType","priority"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > SecretGroups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","secret"]},"v1-projects--projectId--secrets-post-team-scoped":{"operationId":"postProjectsSecrets","summary":"Create project secret","description":"Creates a project secret with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the secret group","example":"example-secret-group"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","secretType","priority","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a secret with the same derived identifier"}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"required":["name","secretType","priority"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > SecretGroups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","secret"]},"v1-projects--projectId--secrets-put":{"operationId":"putProjectsSecrets","summary":"Put project secret","description":"Creates or updates a project secret with the specified payload","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the secret group","example":"example-secret-group"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","secretType","priority","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"required":["name","secretType","priority"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > SecretGroups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","secret"]},"v1-projects--projectId--secrets-put-team-scoped":{"operationId":"putProjectsSecrets","summary":"Put project secret","description":"Creates or updates a project secret with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the secret group","example":"example-secret-group"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","secretType","priority","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"required":["name","secretType","priority"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > SecretGroups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","secret"]},"v1-projects--projectId--secrets--secretId--patch":{"operationId":"patchProjectsSecretsSecretid","summary":"Patch project secret","description":"Updates a project secret with the specified payload","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"Details about the updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the secret group","example":"example-secret-group"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","secretType","priority","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to."},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to."}},"additionalProperties":false},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["patch","secret"]},"v1-projects--projectId--secrets--secretId--patch-team-scoped":{"operationId":"patchProjectsSecretsSecretid","summary":"Patch project secret","description":"Updates a project secret with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"Details about the updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The name of the secret.","example":"Example Secret"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the secret group","example":"example-secret-group"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","secretType","priority","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"type":{"type":"string","enum":["secret","config"],"description":"The hierarchy type of the created secret.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The injection scope of the created secret","example":"environment"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to."},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to."}},"additionalProperties":false},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"uniqueItems":true,"description":"An array of addons to link to this secret group."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"uniqueItems":true,"description":"An array of external addons to link to this secret group."},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["patch","secret"]},"v1-projects--projectId--secrets--secretId--get":{"operationId":"getProjectsSecretsSecretid","summary":"Get project secret","description":"View a project secret including its contents","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}}],"responses":{"200":{"description":"The full secret including its contents.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"name":{"type":"string","description":"Secret group name","example":"Example secret group"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the secret group","example":"This is the secret group description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the created secret group","example":"environment"},"projectId":{"type":"string","description":"ID of the project that the secret group belongs to","example":"default-project"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secret groups will be merged","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp when the secret group was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the secret group was last updated at","example":"2021-01-01 12:00:00.000Z"},"secrets":{"type":"object","properties":{},"additionalProperties":false,"description":"Decrypted secret data. If the `show` parameter is set to `this`, this will only contain secrets saved to this group. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked addons. Otherwise, this will contain both.","example":{"variables":{"a_key":"a_secret","b_key":"b_secret"},"files":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}}},"required":["id","name","tags","type","secretType","projectId","priority","restrictions","createdAt","updatedAt","secrets"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","secret"]},"v1-projects--projectId--secrets--secretId--get-team-scoped":{"operationId":"getProjectsSecretsSecretid","summary":"Get project secret","description":"View a project secret including its contents","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}}],"responses":{"200":{"description":"The full secret including its contents.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"name":{"type":"string","description":"Secret group name","example":"Example secret group"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the secret group","example":"This is the secret group description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the created secret group","example":"environment"},"projectId":{"type":"string","description":"ID of the project that the secret group belongs to","example":"default-project"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secret groups will be merged","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp when the secret group was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the secret group was last updated at","example":"2021-01-01 12:00:00.000Z"},"secrets":{"type":"object","properties":{},"additionalProperties":false,"description":"Decrypted secret data. If the `show` parameter is set to `this`, this will only contain secrets saved to this group. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked addons. Otherwise, this will contain both.","example":{"variables":{"a_key":"a_secret","b_key":"b_secret"},"files":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}}},"required":["id","name","tags","type","secretType","projectId","priority","restrictions","createdAt","updatedAt","secrets"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","secret"]},"v1-projects--projectId--secrets--secretId--delete":{"operationId":"deleteProjectsSecretsSecretid","summary":"Delete project secret","description":"Delete a project secret","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["delete","secret"]},"v1-projects--projectId--secrets--secretId--delete-team-scoped":{"operationId":"deleteProjectsSecretsSecretid","summary":"Delete project secret","description":"Delete a project secret","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["delete","secret"]},"v1-projects--projectId--secrets--secretId--post":{"operationId":"postProjectsSecretsSecretid","summary":"Update project secret","description":"Update a project secret","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"description":"An array of addons to link to this secret group. If provided, this will overwrite any existing linked addons."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"description":"An array of external addons to link to this secret group. If provided, this will overwrite any existing linked external addons."},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the created secret group","example":"environment"},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["update","secret"]},"v1-projects--projectId--secrets--secretId--post-team-scoped":{"operationId":"postProjectsSecretsSecretid","summary":"Update project secret","description":"Update a project secret","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the secret.","example":"A description"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secrets will be merged.","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"addonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the addon to link."},"description":"An array of addons to link to this secret group. If provided, this will overwrite any existing linked addons."},"externalAddonDependencies":{"type":"array","items":{"type":"object","properties":{"addonId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of the external addon to link.","example":"example-addon"},"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["addonId","keys"],"additionalProperties":false,"description":"An object containing data about the external addon to link."},"description":"An array of external addons to link to this secret group. If provided, this will overwrite any existing linked external addons."},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the created secret group","example":"environment"},"secrets":{"type":"object","properties":{"variables":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Secret variables as JSON object, encrypted at rest. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"NODE_ENV":"production","MONGO_DB":"some_connection_string"}},"files":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["update","secret"]},"v1-projects--projectId--secrets--secretId--addons--addonId--post":{"operationId":"postProjectsSecretsSecretidAddonsAddonid","summary":"Update project secret addon link","description":"Link an addon to a project secret or edit the settings of the linked addon.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the new keys.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]},"defaultKey":{"type":"string","example":"NF_EXAMPLE-ADDON_USERNAME"}},"required":["keyName","defaultKey"],"additionalProperties":false,"description":"Details about a key linked to this secret group."},"description":"An array of objects containing details about the keys linked to this secret group."}},"required":["keys"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["keys"],"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["update","secret-link"],"x-nf-deprecation-replacement":"/secrets/patch-secret","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--secrets--secretId--addons--addonId--post-team-scoped":{"operationId":"postProjectsSecretsSecretidAddonsAddonid","summary":"Update project secret addon link","description":"Link an addon to a project secret or edit the settings of the linked addon.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the new keys.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]},"defaultKey":{"type":"string","example":"NF_EXAMPLE-ADDON_USERNAME"}},"required":["keyName","defaultKey"],"additionalProperties":false,"description":"Details about a key linked to this secret group."},"description":"An array of objects containing details about the keys linked to this secret group."}},"required":["keys"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]}},"required":["keyName"],"additionalProperties":false,"description":"Details about the key to link to this secret group."},"uniqueItems":true,"description":"An array of objects containing details about the keys to link to this secret group.","default":[]}},"required":["keys"],"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["update","secret-link"],"x-nf-deprecation-replacement":"/secrets/patch-secret","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--secrets--secretId--addons--addonId--get":{"operationId":"getProjectsSecretsSecretidAddonsAddonid","summary":"Get project secret addon link details","description":"Get details about a given addon link.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the link between the project secret and addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secretName":{"type":"string","description":"The name of the secret group","example":"Example secret group"},"secretId":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"addonName":{"type":"string","description":"The name of the linked addon","example":"Example Addon"},"addonId":{"type":"string","description":"The ID of the linked addon","example":"example-addon"},"addonType":{"type":"string","description":"The addon type of the linked addon","example":"mongodb"},"linked":{"type":"boolean","description":"Is this addon currently linked to this secret group?","example":true},"linkedKeys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]},"defaultKey":{"type":"string","example":"NF_EXAMPLE-ADDON_USERNAME"}},"required":["keyName","defaultKey"],"additionalProperties":false,"description":"Details about a key linked to this secret group."},"description":"An array of objects containing details about the keys linked to this secret group."},"availableKeys":{"type":"array","items":{"type":"string","example":"username"},"description":"A list of available keys for the given addon."}},"required":["secretName","secretId","addonName","addonId","addonType","linked","availableKeys"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","secret-link"],"x-nf-deprecation-replacement":"/secrets/get-secret","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--secrets--secretId--addons--addonId--get-team-scoped":{"operationId":"getProjectsSecretsSecretidAddonsAddonid","summary":"Get project secret addon link details","description":"Get details about a given addon link.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"Details about the link between the project secret and addon.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secretName":{"type":"string","description":"The name of the secret group","example":"Example secret group"},"secretId":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"addonName":{"type":"string","description":"The name of the linked addon","example":"Example Addon"},"addonId":{"type":"string","description":"The ID of the linked addon","example":"example-addon"},"addonType":{"type":"string","description":"The addon type of the linked addon","example":"mongodb"},"linked":{"type":"boolean","description":"Is this addon currently linked to this secret group?","example":true},"linkedKeys":{"type":"array","items":{"type":"object","properties":{"keyName":{"type":"string","pattern":"[a-zA-Z]+","description":"The name of the key to link.","example":"USERNAME"},"aliases":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9_./-]*$","description":"The name of the alias. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":"MONGO_USERNAME"},"uniqueItems":true,"description":"An array of aliases for the key.","default":[]},"defaultKey":{"type":"string","example":"NF_EXAMPLE-ADDON_USERNAME"}},"required":["keyName","defaultKey"],"additionalProperties":false,"description":"Details about a key linked to this secret group."},"description":"An array of objects containing details about the keys linked to this secret group."},"availableKeys":{"type":"array","items":{"type":"string","example":"username"},"description":"A list of available keys for the given addon."}},"required":["secretName","secretId","addonName","addonId","addonType","linked","availableKeys"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","secret-link"],"x-nf-deprecation-replacement":"/secrets/get-secret","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--secrets--secretId--addons--addonId--delete":{"operationId":"deleteProjectsSecretsSecretidAddonsAddonid","summary":"Unlink addon from project secret","description":"Unlinks an addon from the project secret.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"deprecated":true,"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["delete","secret-link"]},"v1-projects--projectId--secrets--secretId--addons--addonId--delete-team-scoped":{"operationId":"deleteProjectsSecretsSecretidAddonsAddonid","summary":"Unlink addon from project secret","description":"Unlinks an addon from the project secret.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}},{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path","schema":{"name":"addonId","type":"string","required":true,"description":"ID of the addon","example":"example-addon","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"deprecated":true,"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["delete","secret-link"]},"v1-projects--projectId--secrets--secretId--details-get":{"operationId":"getProjectsSecretsSecretidDetails","summary":"Get project secret details","description":"View a project secret with details about its linked addons","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The secret with details about its linked addons.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"name":{"type":"string","description":"Secret group name","example":"Example secret group"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the secret group","example":"This is the secret group description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the created secret group","example":"environment"},"projectId":{"type":"string","description":"ID of the project that the secret group belongs to","example":"default-project"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secret groups will be merged","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp when the secret group was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the secret group was last updated at","example":"2021-01-01 12:00:00.000Z"},"secrets":{"type":"object","properties":{},"additionalProperties":false,"description":"Decrypted secret data from secrets saved to this group.","example":{"variables":{"a_key":"a_secret","b_key":"b_secret"},"files":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"addonSecrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the linked addon","example":"example-addon"},"name":{"type":"string","description":"The name of the linked addon","example":"Example Addon"},"addonType":{"type":"string","description":"The addon type of the linked addon","example":"mongodb"},"version":{"type":"string","description":"The version of the linked addon","example":"4.4.1"},"variables":{"type":"object","properties":{},"description":"Decrypted secret data. If the `show` parameter is set to `group`, this will only contain secrets saved to this group. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked addons. Otherwise, this will contain both.","example":{"NF_MONGO_USERNAME":"0000000000000000","NF_MONGO_PASSWORD":"00000000000000000000000000000000"}}},"required":["id","name","addonType","version","variables"],"additionalProperties":false},"description":"Details about linked addons."}},"required":["id","name","tags","type","secretType","projectId","priority","restrictions","createdAt","updatedAt","secrets","addonSecrets"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","secret-details"]},"v1-projects--projectId--secrets--secretId--details-get-team-scoped":{"operationId":"getProjectsSecretsSecretidDetails","summary":"Get project secret details","description":"View a project secret with details about its linked addons","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the project secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The secret with details about its linked addons.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the secret group","example":"example-secret-group"},"name":{"type":"string","description":"Secret group name","example":"Example secret group"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the secret group","example":"This is the secret group description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the secret group.","example":"secret"},"secretType":{"type":"string","enum":["environment-arguments","environment","arguments"],"description":"The type of the created secret group","example":"environment"},"projectId":{"type":"string","description":"ID of the project that the secret group belongs to","example":"default-project"},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority with which different secret groups will be merged","example":10},"restrictions":{"type":"object","properties":{"restricted":{"type":"boolean","description":"Whether the secret is restricted to specific resources, tags, or environments. If this is `true`, resources listed in `nfObjects`, with a tag listed in `tags`, or in an environment listed in `stageIds` will have access to these secrets. Otherwise, all resources in the project will be able to access it.","example":true,"default":false},"nfObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the entity the secret is restricted to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"Type of the entity the secret is restricted to.","example":"service"}},"required":["id","type"],"additionalProperties":false},"uniqueItems":true,"description":"List of Northflank services & jobs the secret is restricted to","default":[]},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"List of tags the secret is restricted to.","default":[]},"tagMatchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"},"stageIds":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"uniqueItems":true,"description":"IDs of the environments the secret is restricted to.","default":[]}},"additionalProperties":false,"description":"Restriction settings of the secret"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp when the secret group was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the secret group was last updated at","example":"2021-01-01 12:00:00.000Z"},"secrets":{"type":"object","properties":{},"additionalProperties":false,"description":"Decrypted secret data from secrets saved to this group.","example":{"variables":{"a_key":"a_secret","b_key":"b_secret"},"files":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"addonSecrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the linked addon","example":"example-addon"},"name":{"type":"string","description":"The name of the linked addon","example":"Example Addon"},"addonType":{"type":"string","description":"The addon type of the linked addon","example":"mongodb"},"version":{"type":"string","description":"The version of the linked addon","example":"4.4.1"},"variables":{"type":"object","properties":{},"description":"Decrypted secret data. If the `show` parameter is set to `group`, this will only contain secrets saved to this group. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked addons. Otherwise, this will contain both.","example":{"NF_MONGO_USERNAME":"0000000000000000","NF_MONGO_PASSWORD":"00000000000000000000000000000000"}}},"required":["id","name","addonType","version","variables"],"additionalProperties":false},"description":"Details about linked addons."}},"required":["id","name","tags","type","secretType","projectId","priority","restrictions","createdAt","updatedAt","secrets","addonSecrets"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","project"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","secret-details"]},"v1-projects--projectId--services-get":{"operationId":"getProjectsServices","summary":"List services","description":"Gets a list of services belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of services","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"services":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"projectId":{"type":"string","description":"ID of the project the service belongs to.","example":"default-project"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"},"name":{"type":"string","description":"Service name","example":"Example Service"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the service","example":"This is the service description"},"serviceType":{"type":"string","enum":["combined","build","deployment"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"disabledCI":{"type":"boolean","description":"Whether Continuous Integration is disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether Continuous Deployment is disabled","example":false},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["id","uid","appId","projectId","name","tags","serviceType","disabledCI","disabledCD","status"],"additionalProperties":false,"description":"A service object."},"description":"An array of services."}},"required":["services"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","services"]},"v1-projects--projectId--services-get-team-scoped":{"operationId":"getProjectsServices","summary":"List services","description":"Gets a list of services belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of services","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"services":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"projectId":{"type":"string","description":"ID of the project the service belongs to.","example":"default-project"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"},"name":{"type":"string","description":"Service name","example":"Example Service"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"description":{"type":"string","description":"A short description of the service","example":"This is the service description"},"serviceType":{"type":"string","enum":["combined","build","deployment"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"disabledCI":{"type":"boolean","description":"Whether Continuous Integration is disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether Continuous Deployment is disabled","example":false},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["id","uid","appId","projectId","name","tags","serviceType","disabledCI","disabledCD","status"],"additionalProperties":false,"description":"A service object."},"description":"An array of services."}},"required":["services"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","services"]},"v1-projects--projectId--services-build-post":{"operationId":"postProjectsServicesBuild","summary":"Create build service","description":"Creates a new build service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a service with the same derived identifier"}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create service","x-nf-cli-command":["create","service","build"]},"v1-projects--projectId--services-build-post-team-scoped":{"operationId":"postProjectsServicesBuild","summary":"Create build service","description":"Creates a new build service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a service with the same derived identifier"}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create service","x-nf-cli-command":["create","service","build"]},"v1-projects--projectId--services-build-put":{"operationId":"putProjectsServicesBuild","summary":"Put build service","description":"Creates or updates a build service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put service","x-nf-cli-command":["put","service","build"]},"v1-projects--projectId--services-build-put-team-scoped":{"operationId":"putProjectsServicesBuild","summary":"Put build service","description":"Creates or updates a build service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["name","billing","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put service","x-nf-cli-command":["put","service","build"]},"v1-projects--projectId--services-build--serviceId--patch":{"operationId":"patchProjectsServicesBuildServiceid","summary":"Patch build service","description":"Updates a build service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled."},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch service","x-nf-cli-command":["patch","service","build"]},"v1-projects--projectId--services-build--serviceId--patch-team-scoped":{"operationId":"patchProjectsServicesBuildServiceid","summary":"Patch build service","description":"Updates a build service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"required":["projectUrl","projectType"],"additionalProperties":false,"description":"Version control source. Required for Git build services and ignored when buildSource is bundle."},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled."},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch service","x-nf-cli-command":["patch","service","build"]},"v1-projects--projectId--services-combined-post":{"operationId":"postProjectsServicesCombined","summary":"Create combined service","description":"Creates a new combined service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a service with the same derived identifier"}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}},"required":["instances"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create service","x-nf-cli-command":["create","service","combined"]},"v1-projects--projectId--services-combined-post-team-scoped":{"operationId":"postProjectsServicesCombined","summary":"Create combined service","description":"Creates a new combined service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a service with the same derived identifier"}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}},"required":["instances"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create service","x-nf-cli-command":["create","service","combined"]},"v1-projects--projectId--services-combined-put":{"operationId":"putProjectsServicesCombined","summary":"Put combined service","description":"Creates or updates a combined service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}},"required":["instances"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put service","x-nf-cli-command":["put","service","combined"]},"v1-projects--projectId--services-combined-put-team-scoped":{"operationId":"putProjectsServicesCombined","summary":"Put combined service","description":"Creates or updates a combined service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}},"required":["instances"],"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment","buildSettings"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put service","x-nf-cli-command":["put","service","combined"]},"v1-projects--projectId--services-combined--serviceId--patch":{"operationId":"patchProjectsServicesCombinedServiceid","summary":"Patch combined service","description":"Updates a combined service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"deployment":{"type":"object","properties":{"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"additionalProperties":false},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"additionalProperties":false},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled."},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch service","x-nf-cli-command":["patch","service","combined"]},"v1-projects--projectId--services-combined--serviceId--patch-team-scoped":{"operationId":"patchProjectsServicesCombinedServiceid","summary":"Patch combined service","description":"Updates a combined service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"required":["projectUrl","projectType","projectBranch"],"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"deployment":{"type":"object","properties":{"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"additionalProperties":false},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"additionalProperties":false},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"additionalProperties":false},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled."},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"}},"additionalProperties":false},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"additionalProperties":false},"buildSettings":{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future."},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false}},"additionalProperties":false},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch service","x-nf-cli-command":["patch","service","combined"]},"v1-projects--projectId--services-deployment-post":{"operationId":"postProjectsServicesDeployment","summary":"Create deployment service","description":"Creates a new deployment service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Unable to verify external image"},"409":{"description":"There is already a service with the same derived identifier"}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["instances","internal"],"additionalProperties":false,"description":"Internal deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["instances","external"],"additionalProperties":false,"description":"External deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}}},"required":["instances"],"additionalProperties":false,"description":"Choose later"}],"description":"Deployment type"},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create service","x-nf-cli-command":["create","service","deployment"]},"v1-projects--projectId--services-deployment-post-team-scoped":{"operationId":"postProjectsServicesDeployment","summary":"Create deployment service","description":"Creates a new deployment service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"400":{"description":"Unable to verify external image"},"409":{"description":"There is already a service with the same derived identifier"}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["instances","internal"],"additionalProperties":false,"description":"Internal deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["instances","external"],"additionalProperties":false,"description":"External deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}}},"required":["instances"],"additionalProperties":false,"description":"Choose later"}],"description":"Deployment type"},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"create service","x-nf-cli-command":["create","service","deployment"]},"v1-projects--projectId--services-deployment-put":{"operationId":"putProjectsServicesDeployment","summary":"Put deployment service","description":"Creates or updates a deployment service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["instances","internal"],"additionalProperties":false,"description":"Internal deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["instances","external"],"additionalProperties":false,"description":"External deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}}},"required":["instances"],"additionalProperties":false,"description":"Choose later"}],"description":"Deployment type"},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put service","x-nf-cli-command":["put","service","deployment"]},"v1-projects--projectId--services-deployment-put-team-scoped":{"operationId":"putProjectsServicesDeployment","summary":"Put deployment service","description":"Creates or updates a deployment service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the created or updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["instances","internal"],"additionalProperties":false,"description":"Internal deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["instances","external"],"additionalProperties":false,"description":"External deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}}},"required":["instances"],"additionalProperties":false,"description":"Choose later"}],"description":"Deployment type"},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false}},"required":["name","billing","deployment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Create","x-nf-team-scoped":true,"x-nf-subheading":"put service","x-nf-cli-command":["put","service","deployment"]},"v1-projects--projectId--services-deployment--serviceId--patch":{"operationId":"patchProjectsServicesDeploymentServiceid","summary":"Patch deployment service","description":"Updates a deployment service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["instances","internal"],"additionalProperties":false,"description":"Internal deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["instances","external"],"additionalProperties":false,"description":"External deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}}},"required":["instances"],"additionalProperties":false,"description":"Choose later"}],"description":"Deployment type"},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch service","x-nf-cli-command":["patch","service","deployment"]},"v1-projects--projectId--services-deployment--serviceId--patch-team-scoped":{"operationId":"patchProjectsServicesDeploymentServiceid","summary":"Patch deployment service","description":"Updates a deployment service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"deployment":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false}},"required":["instances","internal"],"additionalProperties":false,"description":"Internal deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false}},"required":["instances","external"],"additionalProperties":false,"description":"External deployment"},{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}}},"required":["instances"],"additionalProperties":false,"description":"Choose later"}],"description":"Deployment type"},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-subheading":"patch service","x-nf-cli-command":["patch","service","deployment"]},"v1-projects--projectId--services--serviceId--get":{"operationId":"getProjectsServicesServiceid","summary":"Get service","description":"Gets information about the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the service.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"},"buildEngineConfiguration":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildpack","buildkit","kaniko"],"description":"The build engine used.","example":"buildpack"},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"The Buildpack stack used.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks used.","default":[]},"useCache":{"type":"boolean","description":"Should build dependencies be cached?"}},"additionalProperties":false,"description":"Details about Buildpack settings."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"},"useInternalCache":{"type":"boolean","description":"Should use persistent storage to store all layers?"},"internalCacheStorage":{"type":"boolean","description":"Storage size to use for internal cache"}},"additionalProperties":false,"description":"Details about Buildkit settings."},"kaniko":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"}},"additionalProperties":false,"description":"Details about Kaniko settings."}},"additionalProperties":false,"description":"DEPRECATED. This field has been deprecated in favour of fields from the `buildEngine` and `buildConfiguration` objects."},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"dockerWorkDir":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/"},"dockerFilePath":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/Dockerfile"}},"required":["projectUrl","projectType","dockerWorkDir","dockerFilePath"],"additionalProperties":false}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status","uid"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"},"buildEngineConfiguration":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildpack","buildkit","kaniko"],"description":"The build engine used.","example":"buildpack"},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"The Buildpack stack used.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks used.","default":[]},"useCache":{"type":"boolean","description":"Should build dependencies be cached?"}},"additionalProperties":false,"description":"Details about Buildpack settings."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"},"useInternalCache":{"type":"boolean","description":"Should use persistent storage to store all layers?"},"internalCacheStorage":{"type":"boolean","description":"Storage size to use for internal cache"}},"additionalProperties":false,"description":"Details about Buildkit settings."},"kaniko":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"}},"additionalProperties":false,"description":"Details about Kaniko settings."}},"additionalProperties":false,"description":"DEPRECATED. This field has been deprecated in favour of fields from the `buildEngine` and `buildConfiguration` objects."},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"},"dockerWorkDir":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/"},"dockerFilePath":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/Dockerfile"}},"required":["projectUrl","projectType","projectBranch","dockerWorkDir","dockerFilePath"],"additionalProperties":false}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status","uid"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status","uid"],"additionalProperties":false}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service"]},"v1-projects--projectId--services--serviceId--get-team-scoped":{"operationId":"getProjectsServicesServiceid","summary":"Get service","description":"Gets information about the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the service.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use. (Deprecated - use buildPlan for build resources instead.).","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"serviceType":{"type":"string","enum":["build"],"description":"Type of the service (combined, build or deployment)","example":"build"},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."}},"additionalProperties":false,"description":"Details about the current service status."},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"},"buildEngineConfiguration":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildpack","buildkit","kaniko"],"description":"The build engine used.","example":"buildpack"},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"The Buildpack stack used.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks used.","default":[]},"useCache":{"type":"boolean","description":"Should build dependencies be cached?"}},"additionalProperties":false,"description":"Details about Buildpack settings."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"},"useInternalCache":{"type":"boolean","description":"Should use persistent storage to store all layers?"},"internalCacheStorage":{"type":"boolean","description":"Storage size to use for internal cache"}},"additionalProperties":false,"description":"Details about Buildkit settings."},"kaniko":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"}},"additionalProperties":false,"description":"Details about Kaniko settings."}},"additionalProperties":false,"description":"DEPRECATED. This field has been deprecated in favour of fields from the `buildEngine` and `buildConfiguration` objects."},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"dockerWorkDir":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/"},"dockerFilePath":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/Dockerfile"}},"required":["projectUrl","projectType","dockerWorkDir","dockerFilePath"],"additionalProperties":false}},"required":["name","billing","buildSettings","serviceType","id","appId","cluster","status","uid"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"buildPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the build plan to use.","example":"nf-compute-200-8"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"disabledCI":{"type":"boolean","description":"Whether CI (continuous integration) should be disabled.","default":false},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"bundleData":{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"Branch identifier for the bundle.","example":"main"}},"required":["bundleUrl","branch"],"additionalProperties":false},"buildSettings":{"oneOf":[{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"dockerfile":{"type":"object","properties":{"useCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future and currently has no effect."},"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit","default":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","example":true,"default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB.","example":32768},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"number","format":"float","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"required":["dockerFilePath","dockerWorkDir"],"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24","default":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks to use.","default":[]},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/","default":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false,"default":false}},"additionalProperties":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"}],"description":"Build engine"},"buildConfiguration":{"type":"object","properties":{"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"default":{"pathIgnoreRules":[],"isAllowList":false,"ciIgnoreFlagsEnabled":false}},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"},"default":{}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["combined"],"description":"Type of the service (combined, build or deployment)","example":"combined"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"build":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The current status of the build.","example":"SUCCESS"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the build reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status"],"additionalProperties":false,"description":"Details about the status of the most recent build."},"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"},"buildEngineConfiguration":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildpack","buildkit","kaniko"],"description":"The build engine used.","example":"buildpack"},"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"The Buildpack stack used.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom Buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom Buildpacks used.","default":[]},"useCache":{"type":"boolean","description":"Should build dependencies be cached?"}},"additionalProperties":false,"description":"Details about Buildpack settings."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"},"useInternalCache":{"type":"boolean","description":"Should use persistent storage to store all layers?"},"internalCacheStorage":{"type":"boolean","description":"Storage size to use for internal cache"}},"additionalProperties":false,"description":"Details about Buildkit settings."},"kaniko":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Should intermediate image layers be cached?"}},"additionalProperties":false,"description":"Details about Kaniko settings."}},"additionalProperties":false,"description":"DEPRECATED. This field has been deprecated in favour of fields from the `buildEngine` and `buildConfiguration` objects."},"vcsData":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","minLength":24,"maxLength":24,"description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `vcsLinkId` is provided, Northflank will instead use your linked account with that ID."},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"},"dockerWorkDir":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/"},"dockerFilePath":{"type":"string","description":"DEPRECATED. This field has been deprecated in favour of the field in `buildSettings.dockerfile`.","example":"/Dockerfile"}},"required":["projectUrl","projectType","projectBranch","dockerWorkDir","dockerFilePath"],"additionalProperties":false}},"required":["name","billing","buildSettings","serviceType","deployment","id","appId","cluster","status","uid"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The name of the service.","example":"Example Service"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"A description of the service.","example":"A service description"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"billing":{"type":"object","properties":{"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The ID of the deployment plan to use.","example":"nf-compute-20"},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false}},"required":["deploymentPlan"],"additionalProperties":false},"infrastructure":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86","arm"]}},"additionalProperties":false},"ports":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"description":"The port number.","example":8080},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false},"advancedOptions":{"type":"object","properties":{"enableTlsPassthrough":{"type":"boolean","description":"Whether this port should use pass through mode for TLS"}},"additionalProperties":false},"protocol":{"type":"string","oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"oneOf":[{"type":"string","enum":["HTTP","HTTP/2"]},{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"]}]}],"description":"The protocol to use for the port.","example":"HTTP"}},"required":["name","internalPort","protocol"],"additionalProperties":false},"default":[]},"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the runtime environment to set for the service","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"},"default":{}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."},"loadBalancing":{"type":"object","properties":{"mode":{"type":"string","enum":["leastConnection","consistentHash","roundRobin","consistentReplicaRouting"]},"consistentHash":{"type":"object","properties":{"mode":{"type":"string","enum":["ip","customHeader"]},"header":{"type":"string","nullable":true}},"required":["mode"],"additionalProperties":false},"consistentReplicaRouting":{"type":"object","properties":{"mode":{"type":"string","enum":["path","header"]}},"required":["mode"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"autoscaling":{"type":"object","properties":{"horizontal":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether horizontal autoscaling should be enabled","example":true},"minReplicas":{"type":"number","format":"float","minimum":1,"description":"Minimum number of replicas which should be running at any time","example":1},"maxReplicas":{"type":"number","format":"float","description":"Maximum number of replicas which can be running at any time","example":3},"cpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account cpu usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold CPU usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"memory":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into account memory usage"},"thresholdPercentage":{"type":"integer","minimum":10,"maximum":100,"description":"Threshold memory usage percentage at which the workload will be scaled"}},"required":["enabled","thresholdPercentage"],"additionalProperties":false},"rps":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether autoscaling should take into requests-per-second"},"thresholdValue":{"type":"integer","minimum":1,"description":"Threshold rps value on which the workload will be scaled"}},"required":["enabled","thresholdValue"],"additionalProperties":false},"userMetrics":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to enable handling for custom metrics in the autoscaling configuration","example":true},"exposedMetricsPath":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$","description":"Path on which the metrics will be exposed by the service..","example":"/metrics"},"exposedMetricsPort":{"type":"integer","description":"Port on which the metrics will be exposed by the service.","example":8080},"metrics":{"type":"array","items":{"type":"object","properties":{"metricName":{"type":"string","pattern":"[a-zA-Z_:][a-zA-Z0-9_:]*$","description":"Name of the custom metric","example":"example-metric"},"metricType":{"type":"string","enum":["gauge","counter"],"description":"Type of metric exposed, this will affect how it'll be queried by the autoscaler component: Gauge will be used as is, Counter will be used with rate()","example":"gauge"},"thresholdValue":{"type":"number","format":"float","description":"Threshold value on which the workload will be scaled. Represents the average value across all running pods.","example":2}},"required":["metricName","metricType","thresholdValue"],"additionalProperties":false},"description":"Array of custom metrics exposed by the service that will be used by the autoscaling configuration. At least one metric is required."}},"required":["enabled","exposedMetricsPath","exposedMetricsPort","metrics"],"additionalProperties":false}},"required":["enabled","minReplicas","maxReplicas"],"additionalProperties":false,"description":"Describes the horizontal autoscaling configuration"}},"additionalProperties":false,"description":"Describes all autoscaling configurations"},"createOptions":{"type":"object","properties":{"volumesToAttach":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39}},"expiryTime":{"type":"integer","minimum":300,"maximum":604800,"description":"Number of seconds from creation after which the service should automatically expire. Once reached, the service is paused and scheduled for deletion. Must be between 300 (5 minutes) and 604800 (7 days).","example":86400}},"additionalProperties":false},"serviceType":{"type":"string","enum":["deployment"],"description":"Type of the service (combined, build or deployment)","example":"deployment"},"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["deployment","statefulSet"],"description":"The way the service should be deployed. Either as a deployment (default), or as a stateful set."},"instances":{"type":"integer","minimum":0,"description":"The number of instances to run the service on.","example":1},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"strategy":{"type":"object","properties":{"type":{"type":"string","enum":["recreate","rollout-steady","rollout-balanced","rollout-fast","custom"],"description":"Configures the instance roll out strategy of your service. Currently only available via feature flag."},"settings":{"type":"object","properties":{"maxSurge":{"oneOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be created above the desired count."},"maxUnavailable":{"anyOf":[{"type":"integer","minimum":0,"description":"A non-negative integer."},{"type":"string","pattern":"^\\d+%$","description":"A percentage string in the range 0% to 100%, e.g. `25%`"}],"description":"Maximum number or percentage of pods that can be unavailable during the update."}},"required":["maxSurge","maxUnavailable"],"additionalProperties":false}},"additionalProperties":false,"description":"Roll out strategy of the service"},"zonalRedundancy":{"type":"object","properties":{"type":{"type":"string","enum":["disabled","preferred","required"],"description":"Defines scheduling behaviour across different zones within the same region."},"minZones":{"type":"integer","minimum":1,"description":"Defines how many zones are required and will prevent containers from additional scheduling into existing zones. (Only relevant if type is set to \"required\")"}},"additionalProperties":false},"gpu":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether GPUs are enabled for this workload."},"configuration":{"type":"object","properties":{"gpuType":{"type":"string","description":"The type of GPU to use."},"gpuCount":{"type":"integer","description":"The number of GPUs to allocate."},"timesliced":{"type":"boolean","description":"Whether GPU timeslicing is enabled."}},"required":["gpuType"],"additionalProperties":false}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."},"gradualRolloutStrategyId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","oneOf":[{"description":"The id of the strategy to be attached to service."}],"nullable":true,"description":"The id of the strategy to be attached to service.","examples":["strategy-id","strategy-id"]},"ssh":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables SSH access if the resource matches an SSH identity selector."}},"required":["enabled"],"additionalProperties":false,"description":"Controls related to SSH access within the resource."},"metadata":{"type":"object","properties":{"labels":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom labels for the workload."},"annotations":{"type":"object","properties":{},"additionalProperties":false,"description":"Specify custom annotations for the workload as string or object."}},"additionalProperties":false,"description":"Allow setting custom labels and annotations for workloads."},"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"Slug identifying this volume within the service.","example":"data"},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"maxItems":20,"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce"],"description":"Access mode of a per-replica volume. Always `ReadWriteOnce`.","default":"ReadWriteOnce"},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["storageSize"],"additionalProperties":false,"description":"Per-replica volume storage schema"}},"required":["id","mounts","spec"],"additionalProperties":false},"maxItems":50,"uniqueItems":true,"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},{"oneOf":[{"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."}],"description":"Per-replica persistent volumes for a statefulSet service. Each replica receives its own instance of every volume. Only valid when `deployment.type` is `statefulSet`."},"containerSnapshot":{"type":"object","properties":{"restoreFrom":{"type":"string","format":"uuid","description":"The successful container snapshot to restore the service from."},"capture":{"type":"object","properties":{"backupDestinationId":{"type":"string","description":"The backup destination for termination snapshots."},"onTermination":{"type":"boolean","description":"Creates a snapshot when a service container terminates, including crashes, rollouts, scale-downs, evictions, and manual restarts.","default":false},"retention":{"type":"object","properties":{"maxSnapshots":{"type":"integer","minimum":1,"maximum":100,"description":"The maximum number of termination snapshots retained for the service.","default":10}},"additionalProperties":false,"default":{"maxSnapshots":10}}},"additionalProperties":false,"default":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"additionalProperties":false,"default":{"capture":{"onTermination":false,"retention":{"maxSnapshots":10}}}},"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"imageUrl":{"type":"string","description":"Image registry url of the deployed image."}},"required":["instances"],"additionalProperties":false},"id":{"type":"string","description":"Identifier for the service","example":"example-service"},"appId":{"type":"string","description":"Full identifier used for service deployment","example":"/example-user/default-project/example-service"},"cluster":{"type":"object","properties":{"id":{"type":"string","description":"The id of the cluster associated with this project.","example":"nf-europe-west"},"name":{"type":"string","description":"The name of the cluster associated with this project.","example":"nf-europe-west"},"namespace":{"type":"string","description":"Namespace this resource is located within on the cluster.","example":"ns-8zy2mcjh9zn2"},"loadBalancers":{"type":"array","items":{"type":"string","example":"lb.659200800000000000000000.northflank.com"},"description":"Load balancer DNS for the cluster."}},"required":["id","name"],"additionalProperties":false,"description":"Cluster information"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"expiryTime":{"type":"string","format":"date-time","description":"Absolute time at which the service is scheduled to automatically expire. Resolved from createOptions.expiryTime on creation; cleared once the service has expired.","example":"2024-01-01T00:00:00.000Z"},"expiredAt":{"type":"string","format":"date-time","description":"Time at which the service expired and was paused.","example":"2024-01-01T00:00:00.000Z"},"scheduledDeletion":{"type":"string","format":"date-time","description":"Time at which the expired service is scheduled for deletion.","example":"2024-01-31T00:00:00.000Z"},"status":{"type":"object","properties":{"deployment":{"type":"object","properties":{"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"],"description":"The current status of the deployment.","example":"COMPLETED"},"reason":{"type":"string","enum":["SCALING","DEPLOYING"],"description":"The reason the current deployment was started.","example":"DEPLOYING"},"lastTransitionTime":{"type":"string","format":"date-time","description":"The timestamp of when the deployment reached this status.","example":"2021-11-29T11:47:16.624Z"}},"required":["status","reason"],"additionalProperties":false,"description":"Details about the current deployment status."}},"additionalProperties":false,"description":"Details about the current service status."},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"stageId":{"type":"string","description":"ID of the environment the service belongs to.","example":"staging"}},"required":["name","billing","serviceType","deployment","id","appId","cluster","status","uid"],"additionalProperties":false}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service"]},"v1-projects--projectId--services--serviceId--delete":{"operationId":"deleteProjectsServicesServiceid","summary":"Delete service","description":"Deletes the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"delete_child_objects","type":"boolean","description":"If true, platform volumes owned by or attached to this service are also deleted. Per-replica statefulSet volumes are service-owned and always deleted with the service.","example":false,"default":false,"in":"query","schema":{"name":"delete_child_objects","type":"boolean","description":"If true, platform volumes owned by or attached to this service are also deleted. Per-replica statefulSet volumes are service-owned and always deleted with the service.","example":false,"default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","service"]},"v1-projects--projectId--services--serviceId--delete-team-scoped":{"operationId":"deleteProjectsServicesServiceid","summary":"Delete service","description":"Deletes the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"delete_child_objects","type":"boolean","description":"If true, platform volumes owned by or attached to this service are also deleted. Per-replica statefulSet volumes are service-owned and always deleted with the service.","example":false,"default":false,"in":"query","schema":{"name":"delete_child_objects","type":"boolean","description":"If true, platform volumes owned by or attached to this service are also deleted. Per-replica statefulSet volumes are service-owned and always deleted with the service.","example":false,"default":false,"in":"query"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","service"]},"v1-projects--projectId--services--serviceId--branches-get":{"operationId":"getProjectsServicesServiceidBranches","summary":"Get service branches","description":"Gets information about the branches of the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the service's available branches.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"branches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the branch.","example":"main"},"id":{"type":"string","example":"MDM6UmVmMzA0MDU5MzM0OnJlZnMvaGVhZHMvbWFpbg="},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"SHA identifier of the commit.","example":"f8aca180e989be62cba71db629d2ede05f2d10c4"},"author":{"type":"object","properties":{"login":{"type":"string","description":"The login of the commit author.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the commit author."},"message":{"type":"string","description":"Commit message of the commit.","example":"Initial commit"},"date":{"type":"string","format":"date-time","description":"Timestamp of the commit.","example":"2021-09-17T14:04:39.000Z"}},"required":["sha","author"],"additionalProperties":false,"description":"Details about the most recent commit on the branch."}},"required":["name","id","commit"],"additionalProperties":false,"description":"Details about a branch."},"description":"A list of branches for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","branches"]},"v1-projects--projectId--services--serviceId--branches-get-team-scoped":{"operationId":"getProjectsServicesServiceidBranches","summary":"Get service branches","description":"Gets information about the branches of the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the service's available branches.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"branches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the branch.","example":"main"},"id":{"type":"string","example":"MDM6UmVmMzA0MDU5MzM0OnJlZnMvaGVhZHMvbWFpbg="},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"SHA identifier of the commit.","example":"f8aca180e989be62cba71db629d2ede05f2d10c4"},"author":{"type":"object","properties":{"login":{"type":"string","description":"The login of the commit author.","example":"northflank"}},"required":["login"],"additionalProperties":false,"description":"Details about the commit author."},"message":{"type":"string","description":"Commit message of the commit.","example":"Initial commit"},"date":{"type":"string","format":"date-time","description":"Timestamp of the commit.","example":"2021-09-17T14:04:39.000Z"}},"required":["sha","author"],"additionalProperties":false,"description":"Details about the most recent commit on the branch."}},"required":["name","id","commit"],"additionalProperties":false,"description":"Details about a branch."},"description":"A list of branches for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","branches"]},"v1-projects--projectId--services--serviceId--build-get":{"operationId":"getProjectsServicesServiceidBuild","summary":"List service builds","description":"Lists the builds for the service","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Returns a list of builds for the given service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"builds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false},"description":"An array of builds."}},"required":["builds"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","builds"]},"v1-projects--projectId--services--serviceId--build-get-team-scoped":{"operationId":"getProjectsServicesServiceidBuild","summary":"List service builds","description":"Lists the builds for the service","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Returns a list of builds for the given service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"builds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false},"description":"An array of builds."}},"required":["builds"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","builds"]},"v1-projects--projectId--services--serviceId--build-post":{"operationId":"postProjectsServicesServiceidBuild","summary":"Start service build","description":"Start a new build for the given combined or build service. Git build services require a branch or pull request. Bundle build services require a bundle URL and accept an optional branch and revision.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Returns data about the build initiated","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"status":{"type":"string","description":"The status of the build.","example":"PENDING"},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":false}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string"},"sha":{"type":"string"},"overrides":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Build arguments that will be set on this build only. In case of conflicts these values take precedence.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"docker":{"type":"object","properties":{"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileTarget":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerfileContents":{"type":"string","minLength":1,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."}},"additionalProperties":false,"description":"Overrides for docker build settings."}},"additionalProperties":false,"description":"An optional object that may specify several different overrides on the build level."}},"required":["bundleUrl"],"additionalProperties":false,"description":"Build from bundle","x-required":true},{"type":"object","properties":{"sha":{"type":"string","minLength":40,"maxLength":40,"description":"Commit sha to build. If not provided, builds the most recent relevant commit.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"},"branch":{"type":"string","description":"Branch to build from. If `sha` is not provided, the latest commit of this branch will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."},"pullRequestId":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."},{"type":"integer","minimum":0,"description":"ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."}],"description":"ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."},"overrides":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Build arguments that will be set on this build only. In case of conflicts these values take precedence.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"docker":{"type":"object","properties":{"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileTarget":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerfileContents":{"type":"string","minLength":1,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."}},"additionalProperties":false,"description":"Overrides for docker build settings."}},"additionalProperties":false,"description":"An optional object that may specify several different overrides on the build level."}},"additionalProperties":false,"description":"Build from git repository","x-required":true}],"description":"Build type"}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["start","service","build"]},"v1-projects--projectId--services--serviceId--build-post-team-scoped":{"operationId":"postProjectsServicesServiceidBuild","summary":"Start service build","description":"Start a new build for the given combined or build service. Git build services require a branch or pull request. Bundle build services require a bundle URL and accept an optional branch and revision.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Returns data about the build initiated","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"status":{"type":"string","description":"The status of the build.","example":"PENDING"},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":false}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"bundleUrl":{"type":"string","description":"URL of the bundle to be built","example":"https://example.com/archive.tar"},"branch":{"type":"string"},"sha":{"type":"string"},"overrides":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Build arguments that will be set on this build only. In case of conflicts these values take precedence.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"docker":{"type":"object","properties":{"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileTarget":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerfileContents":{"type":"string","minLength":1,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."}},"additionalProperties":false,"description":"Overrides for docker build settings."}},"additionalProperties":false,"description":"An optional object that may specify several different overrides on the build level."}},"required":["bundleUrl"],"additionalProperties":false,"description":"Build from bundle","x-required":true},{"type":"object","properties":{"sha":{"type":"string","minLength":40,"maxLength":40,"description":"Commit sha to build. If not provided, builds the most recent relevant commit.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"},"branch":{"type":"string","description":"Branch to build from. If `sha` is not provided, the latest commit of this branch will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."},"pullRequestId":{"anyOf":[{"type":"string","pattern":"^[0-9]+$","description":"ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."},{"type":"integer","minimum":0,"description":"ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."}],"description":"ID of a pull request to build from. If `sha` is not provided, the latest commit of this pull request will be built. Only supported by build services. Build services require either `branch` or `pullRequestId` field, but cannot be provided with both."},"overrides":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"Build arguments that will be set on this build only. In case of conflicts these values take precedence.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"docker":{"type":"object","properties":{"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileTarget":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerfileContents":{"type":"string","minLength":1,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."}},"additionalProperties":false,"description":"Overrides for docker build settings."}},"additionalProperties":false,"description":"An optional object that may specify several different overrides on the build level."}},"additionalProperties":false,"description":"Build from git repository","x-required":true}],"description":"Build type"}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["start","service","build"]},"v1-projects--projectId--services--serviceId--build-arguments-get":{"operationId":"getProjectsServicesServiceidBuildArguments","summary":"Get service build arguments","description":"Gets the build arguments of the given service. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The build arguments for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":false,"description":"The build arguments, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The build secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-arguments"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--build-arguments-get-team-scoped":{"operationId":"getProjectsServicesServiceidBuildArguments","summary":"Get service build arguments","description":"Gets the build arguments of the given service. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The build arguments for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":false,"description":"The build arguments, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The build secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-arguments"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--build-arguments-post":{"operationId":"postProjectsServicesServiceidBuildArguments","summary":"Edit service build arguments","description":"Sets the build arguments for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Services > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","build-arguments"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--build-arguments-post-team-scoped":{"operationId":"postProjectsServicesServiceidBuildArguments","summary":"Edit service build arguments","description":"Sets the build arguments for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the build arguments to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"ARGUMENT_1":"abcdef","ARGUMENT_2":"12345"}},"buildFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"dockerSecretMounts":{"type":"object","properties":{},"description":"Docker secret mount contents as JSON object, encrypted at rest. Must be a valid Docker secret mount identifier","example":{"example-secret-mount_1":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Services > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","build-arguments"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--build-arguments-details-get":{"operationId":"getProjectsServicesServiceidBuildArgumentsDetails","summary":"Get service build arguments details","description":"Get details about the build arguments accessible by the given service. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details of the build arguments of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"buildFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-argument-details"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--build-arguments-details-get-team-scoped":{"operationId":"getProjectsServicesServiceidBuildArgumentsDetails","summary":"Get service build arguments details","description":"Get details about the build arguments accessible by the given service. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details of the build arguments of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"buildArguments":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"buildFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["buildArguments","buildFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-argument-details"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--build-cache-delete":{"operationId":"deleteProjectsServicesServiceidBuildCache","summary":"Clear the build cache of a service","description":"Clears the build cache of a given combined or build service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["reset","service","build-cache"]},"v1-projects--projectId--services--serviceId--build-cache-delete-team-scoped":{"operationId":"deleteProjectsServicesServiceidBuildCache","summary":"Clear the build cache of a service","description":"Clears the build cache of a given combined or build service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["reset","service","build-cache"]},"v1-projects--projectId--services--serviceId--build-logs-get":{"operationId":"getProjectsServicesServiceidBuildLogs","summary":"Get service build logs","description":"Get logs for a service build","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query","schema":{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-logs"]},"v1-projects--projectId--services--serviceId--build-logs-get-team-scoped":{"operationId":"getProjectsServicesServiceidBuildLogs","summary":"Get service build logs","description":"Get logs for a service build","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query","schema":{"name":"buildId","type":"string","description":"Selects logs for specific build.","example":"fantastic-build-2345","in":"query"}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-logs"]},"v1-projects--projectId--services--serviceId--build-metrics-get":{"operationId":"getProjectsServicesServiceidBuildMetrics","summary":"Get service build metrics","description":"Get metrics for a service build","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query","schema":{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","service","build-metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","service","build-metrics"]}],"x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-metrics"]},"v1-projects--projectId--services--serviceId--build-metrics-get-team-scoped":{"operationId":"getProjectsServicesServiceidBuildMetrics","summary":"Get service build metrics","description":"Get metrics for a service build","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query","schema":{"name":"buildId","type":"string","description":"Selects metrics for specific build.","examples":["fantastic-build-2345","fantastic-build-2345"],"in":"query"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","service","build-metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"buildId":{"type":"string","description":"Selects metrics for specific build.","example":"fantastic-build-2345"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","service","build-metrics"]}],"x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build-metrics"]},"v1-projects--projectId--services--serviceId--build-options-post":{"operationId":"postProjectsServicesServiceidBuildOptions","summary":"Update service build options","description":"Updates the build options for a given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"dockerfile":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB."},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"integer","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"},{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"Don't modify build type settings"}],"description":"Modify build settings"}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","build-options"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--build-options-post-team-scoped":{"operationId":"postProjectsServicesServiceidBuildOptions","summary":"Update service build options","description":"Updates the build options for a given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"dockerfile":{"type":"object","properties":{"buildEngine":{"type":"string","enum":["buildkit","kaniko"],"description":"Build engine to use. Defaults to recommended build engine `buildkit`","example":"buildkit"},"dockerFilePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path of the Dockerfile.","example":"/Dockerfile"},"dockerWorkDir":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory of the Dockerfile.","example":"/"},"dockerfileContents":{"type":"string","nullable":true,"description":"Plain UTF-8 Dockerfile contents. Ordinary API and immediate-build values are literal. In template contexts only `${args.*}` and `${refs.*}` are resolved; native Docker `${...}` syntax is preserved. Sensitive values must use Docker secret mounts rather than template expressions or sensitive arguments or references."},"buildkit":{"type":"object","properties":{"useCache":{"type":"boolean","description":"Use persistent storage to cache build layers.","default":false},"cacheStorageSize":{"type":"integer","description":"The amount of persistent storage available to each build in MB."},"useInternalCache":{"type":"boolean","description":"DEPRECATED: This field will be removed in the near future.","default":false},"internalCacheStorage":{"type":"integer","description":"DEPRECATED: This field will be removed in the near future."}},"additionalProperties":false}},"additionalProperties":false},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"required":["dockerfile"],"additionalProperties":false,"description":"Build from a Dockerfile"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"builder":{"type":"string","enum":["HEROKU_24","HEROKU_22","HEROKU_22_CLASSIC","HEROKU_20","HEROKU_18","GOOGLE_22","GOOGLE_V1","CNB_ALPINE","CNB_BIONIC","PAKETO_JAMMY_TINY","PAKETO_JAMMY_BASE","PAKETO_JAMMY_FULL","PAKETO_TINY","PAKETO_BASE","PAKETO_FULL"],"description":"Buildpack stack to use. Defaults to recommended stack `HEROKU_24`.","example":"HEROKU_24"},"buildpackLocators":{"type":"array","items":{"type":"string","description":"Url or registry identifier of custom buildpack.","example":"https://buildpack-registry.heroku.com/cnb/mars/create-react-app"},"description":"Array of custom buildpacks to use."},"buildContext":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]*$","description":"The working directory to build in.","example":"/"},"useCache":{"type":"boolean","description":"Should build dependencies be cached?","example":false}},"additionalProperties":false},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false}},"required":["buildpack"],"additionalProperties":false,"description":"Build from a Buildpack"},{"type":"object","properties":{"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A pull request build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from pull requests from branches that start with `feature/`.","example":"feature/*"},"description":"An array of pull request build rules. Only supported for build services. Each commit belonging to a pull request on a branch that matches one of the provided build rules will be built automatically."},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[^?:@$~ [\\]{}]*$","description":"A branch build rule. Can contain `*` as a wildcard to match multiple branch names. For example, `feature/*` will build all commits from branches that start with `feature/`.","example":"feature/*"},"description":"An array of branch build rules. Only supported for build services. Each commit belonging to a branch that matches one of the provided build rules will be built automatically."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this build service to be referenced by resources in other projects.","example":true},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of a project to include or exclude.","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can use this build service. If false, all projects except the listed ones can use this build service."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can use this build service."},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax."},"isAllowList":{"type":"boolean","description":"If `true`, the functionality of `pathIgnoreRules` will be inverted. A commit will only be built if a file has been changed that matches one or more of the rules in `pathIgnoreRules`.","example":false},"ciIgnoreFlagsEnabled":{"type":"boolean","description":"If `true`, enables commit ignore flags. If a commit message contains one or more of the flags in `ciIgnoreFlags`, that commit will not be built."},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"]},"ignoreEmptyCommits":{"type":"boolean","description":"If `true`, commits that do not modify any files will not trigger a build. Defaults to `false`, meaning empty commits build regardless of other build rules.","example":false},"dockerfileTarget":{"type":"string","description":"If your Dockerfile contains multiple build stages, you can specify the target stage by entering its name here."},"dockerCredentials":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The ID of the docker credentials to use.","example":"example-docker-credential"}},"includeGitFolder":{"type":"boolean","description":"Include .git folder inside the build context"},"fullGitClone":{"type":"boolean","description":"Include the entire git history as part of the .git folder. Only relevant if \"includeGitFolder\" is set."},"enableGitLfs":{"type":"boolean","description":"Enable Git LFS support for the build"},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":16384,"maximum":65536,"enum":[16384,32768,65536,131072,262144,524288],"description":"Ephemeral storage per build in MB","example":16384}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false,"description":"Don't modify build type settings"}],"description":"Modify build settings"}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","build-options"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--build-source-post":{"operationId":"postProjectsServicesServiceidBuildSource","summary":"Update service build source","description":"Updates the version control source for a given build or combined service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","build-source"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--build-source-post-team-scoped":{"operationId":"postProjectsServicesServiceidBuildSource","summary":"Update service build source","description":"Updates the version control source for a given build or combined service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"projectUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to build.","example":"https://github.com/northflank/gatsby-with-northflank"},"projectType":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"projectBranch":{"type":"string","description":"The name of the branch to use.","example":"master"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","build-source"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--build--buildId--get":{"operationId":"getProjectsServicesServiceidBuildBuildid","summary":"Get service build","description":"Gets information about a build for the service","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"Returns data about the specified build.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build"]},"v1-projects--projectId--services--serviceId--build--buildId--get-team-scoped":{"operationId":"getProjectsServicesServiceidBuildBuildid","summary":"Get service build","description":"Gets information about a build for the service","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"Returns data about the specified build.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the build.","example":"joyous-view-6290"},"branch":{"type":"string","description":"Name of the branch the built commit belongs to.","example":"main"},"pullRequestId":{"anyOf":[{"type":"string"},{"type":"integer"}],"nullable":true,"description":"ID of the pull request the commit belongs to."},"status":{"type":"string","enum":["QUEUED","PENDING","UNSCHEDULABLE","STARTING","CLONING","BUILDING","UPLOADING","ABORTED","FAILURE","SUBMISSION_FAILURE","SUCCESS","CRASHED","IN_PROGRESS"],"description":"The status of the build.","example":"SUCCESS"},"sha":{"type":"string","description":"The sha of the built commit.","example":"12c15e7ee25fd78f567ebf87f9178b8ad70025b3"},"registry":{"type":"object","properties":{"uri":{"type":"string","description":"URI of that can be used to pull the image from the registry"}},"additionalProperties":false},"concluded":{"type":"boolean","description":"Whether the build has finished.","example":true},"createdAt":{"type":"string","description":"Timestamp of the build initiation.","example":"2021-07-28T15:55:38.296Z"},"success":{"type":"boolean","description":"Whether the build was successful.","example":true},"message":{"type":"string","nullable":true,"description":"Description of the build status.","example":"Image successfully built"},"buildConcludedAt":{"type":"number","format":"float","description":"Timestamp of the build concluding.","example":1606237973}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","build"]},"v1-projects--projectId--services--serviceId--build--buildId--delete":{"operationId":"deleteProjectsServicesServiceidBuildBuildid","summary":"Abort service build","description":"Aborts the given service build","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","service","build"]},"v1-projects--projectId--services--serviceId--build--buildId--delete-team-scoped":{"operationId":"deleteProjectsServicesServiceidBuildBuildid","summary":"Abort service build","description":"Aborts the given service build","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path","schema":{"name":"buildId","type":"string","required":true,"description":"ID of the service build","example":"joyous-view-6290","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["abort","service","build"]},"v1-projects--projectId--services--serviceId--containers-get":{"operationId":"getProjectsServicesServiceidContainers","summary":"List service containers","description":"Gets a list of containers for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the addon's containers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the container.","example":"example-service-78b4d4459d-sbtn8"},"createdAt":{"type":"integer","minimum":1,"description":"The timestamp the container was created.","example":1611241087},"status":{"type":"string","enum":["TASK_RUNNING","TASK_STARTING","TASK_STAGING","TASK_KILLING","TASK_KILLED","TASK_FAILED","TASK_FINISHED"],"description":"The current status of the container.","example":"TASK_RUNNING"},"nodeName":{"type":"string","description":"BYOC only: the name of the node the container was scheduled to"},"nodePoolUserId":{"type":"string","description":"BYOC only: the user facing ID of the node pool that the container was scheduled to"},"nodePoolProviderId":{"type":"string","description":"BYOC only: the provider facing ID of the node pool that the container was scheduled to"},"host":{"type":"string","description":"BYOC only: the host address of the node the container was scheduled to"},"ipAddresses":{"type":"array","items":{"type":"string"},"description":"BYOC only: the IP addresses mapping to the container"},"updatedAt":{"type":"integer","minimum":1,"description":"The timestamp the container was last updated.","example":1611241087}},"required":["name","createdAt","status","updatedAt"],"additionalProperties":false,"description":"Data about a container."}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","containers"]},"v1-projects--projectId--services--serviceId--containers-get-team-scoped":{"operationId":"getProjectsServicesServiceidContainers","summary":"List service containers","description":"Gets a list of containers for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the addon's containers.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"containers":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the container.","example":"example-service-78b4d4459d-sbtn8"},"createdAt":{"type":"integer","minimum":1,"description":"The timestamp the container was created.","example":1611241087},"status":{"type":"string","enum":["TASK_RUNNING","TASK_STARTING","TASK_STAGING","TASK_KILLING","TASK_KILLED","TASK_FAILED","TASK_FINISHED"],"description":"The current status of the container.","example":"TASK_RUNNING"},"nodeName":{"type":"string","description":"BYOC only: the name of the node the container was scheduled to"},"nodePoolUserId":{"type":"string","description":"BYOC only: the user facing ID of the node pool that the container was scheduled to"},"nodePoolProviderId":{"type":"string","description":"BYOC only: the provider facing ID of the node pool that the container was scheduled to"},"host":{"type":"string","description":"BYOC only: the host address of the node the container was scheduled to"},"ipAddresses":{"type":"array","items":{"type":"string"},"description":"BYOC only: the IP addresses mapping to the container"},"updatedAt":{"type":"integer","minimum":1,"description":"The timestamp the container was last updated.","example":1611241087}},"required":["name","createdAt","status","updatedAt"],"additionalProperties":false,"description":"Data about a container."}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","containers"]},"v1-projects--projectId--services--serviceId--deployment-get":{"operationId":"getProjectsServicesServiceidDeployment","summary":"Get service deployment","description":"Gets information about the deployment of the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Data about the service deployment.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"internal":{"type":"object","properties":{"appId":{"type":"string","description":"Full identifier of deployed entity","example":"/example-user/default-project/example-service"},"nfObjectId":{"type":"string","description":"ID of deployed entity","example":"example-service"},"nfObjectType":{"type":"string","enum":["service"],"description":"Type of deployed entity","example":"service"},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"repository":{"type":"string","description":"URL of the Git repository being deployed","example":"https://github.com/northflank/gatsby-with-northflank"},"branch":{"type":"string","description":"Branch or source label of the build being deployed","example":"master"},"buildId":{"type":"string","description":"ID of the build currently deployed.","example":"incredible-land-3266"},"buildSHA":{"type":"string","description":"Revision being deployed. `latest` deploys the latest matching build.","example":"latest"},"deployedSHA":{"type":"string","description":"Currently deployed commit SHA. If buildSHA is set to `latest`, this will show the SHA of the latest commit.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"}},"required":["appId","nfObjectId","nfObjectType","branch","buildId","buildSHA"],"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Service deploying a Northflank entity","x-required":true},{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"external":{"type":"object","properties":{"imagePath":{"type":"string","description":"Path of the external image excluding the hostname","example":"nginx:latest"},"registryProvider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"Registry provider hosting the external image","example":"dockerhub"},"privateImage":{"type":"boolean","description":"Does the image require authentication","example":false}},"required":["imagePath","registryProvider","privateImage"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Service deploying an external image","x-required":true}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","deployment"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--deployment-get-team-scoped":{"operationId":"getProjectsServicesServiceidDeployment","summary":"Get service deployment","description":"Gets information about the deployment of the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Data about the service deployment.","schema":{"type":"object","properties":{"data":{"oneOf":[{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"internal":{"type":"object","properties":{"appId":{"type":"string","description":"Full identifier of deployed entity","example":"/example-user/default-project/example-service"},"nfObjectId":{"type":"string","description":"ID of deployed entity","example":"example-service"},"nfObjectType":{"type":"string","enum":["service"],"description":"Type of deployed entity","example":"service"},"buildSource":{"type":"string","enum":["git","bundle"],"description":"Defines the build source for this resource","example":"git"},"repository":{"type":"string","description":"URL of the Git repository being deployed","example":"https://github.com/northflank/gatsby-with-northflank"},"branch":{"type":"string","description":"Branch or source label of the build being deployed","example":"master"},"buildId":{"type":"string","description":"ID of the build currently deployed.","example":"incredible-land-3266"},"buildSHA":{"type":"string","description":"Revision being deployed. `latest` deploys the latest matching build.","example":"latest"},"deployedSHA":{"type":"string","description":"Currently deployed commit SHA. If buildSHA is set to `latest`, this will show the SHA of the latest commit.","example":"262ed9817b3cad5142fbceabe0c9e371e390d616"}},"required":["appId","nfObjectId","nfObjectType","branch","buildId","buildSHA"],"additionalProperties":false}},"required":["internal"],"additionalProperties":false,"description":"Service deploying a Northflank entity","x-required":true},{"type":"object","properties":{"region":{"type":"string","description":"Region where this service is deployed and/or built","example":"europe-west"},"instances":{"type":"integer","description":"Number of instances/replicas running","example":1},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Override configuration which is used at runtime.","example":"default"},"customEntrypoint":{"type":"string","description":"The CMD to run instead of the default if entrypoint override is enabled."},"customCommand":{"type":"string","description":"The CMD to run instead of the default if CMD override is enabled.","examples":["nginx -g","/docker-entrypoint.sh"]}},"required":["configType"],"additionalProperties":false,"description":"Details about the Docker overrides for this deployment."},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration.","example":"default"},"customProcess":{"type":"string","description":"Custom process which should be run."},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run."},"customCommand":{"type":"string","description":"Custom command which should be run."}},"required":["configType"],"additionalProperties":false,"description":"Details about the Buildpack overrides for this deployment."},"storage":{"type":"object","properties":{"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"number","format":"float","description":"Ephemeral storage per container in MB","example":1024}},"required":["storageSize"],"additionalProperties":false,"description":"Details about ephemeral storage settings for this deployment."},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false,"description":"Details about storage settings for this deployment."},"external":{"type":"object","properties":{"imagePath":{"type":"string","description":"Path of the external image excluding the hostname","example":"nginx:latest"},"registryProvider":{"type":"string","enum":["acr","ecr","gar","dockerhub","dhi","github","gitlab","custom","legacy"],"description":"Registry provider hosting the external image","example":"dockerhub"},"privateImage":{"type":"boolean","description":"Does the image require authentication","example":false}},"required":["imagePath","registryProvider","privateImage"],"additionalProperties":false}},"required":["external"],"additionalProperties":false,"description":"Service deploying an external image","x-required":true}],"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","deployment"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--deployment-post":{"operationId":"postProjectsServicesServiceidDeployment","summary":"Update service deployment","description":"Updates the deployment settings of the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["external"],"additionalProperties":false,"description":"An external deployment"},{"type":"object","properties":{"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["internal"],"additionalProperties":false,"description":"An internal deployment"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"additionalProperties":false,"description":"Don't modify the deployment"}],"description":"Deployment type"}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","deployment"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--deployment-post-team-scoped":{"operationId":"postProjectsServicesServiceidDeployment","summary":"Update service deployment","description":"Updates the deployment settings of the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"external":{"type":"object","properties":{"imagePath":{"type":"string","pattern":"^(?:(?:https?:\\/\\/)?([a-zA-Z0-9-]+\\.[a-zA-Z0-9.\\-]+))?(?:\\/)?([a-zA-Z/-9.\\-_]+)(?::([a-zA-Z/-9.\\-_:]+)|@([a-zA-Z/-9.\\-_:]+))$","description":"Image to be deployed. When not deploying from Dockerhub the URL must be specified.","example":"nginx:latest"},"credentials":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the saved credentials to use to access this external image.","example":"example-credentials"}},"required":["imagePath"],"additionalProperties":false},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["external"],"additionalProperties":false,"description":"An external deployment"},{"type":"object","properties":{"internal":{"type":"object","properties":{"id":{"anyOf":[{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":54,"description":"The ID of a build service in the same project","example":"example-build-service"},{"type":"string","description":"The ID of a build service in another project, in the format `project-id/build-service-id`","example":"example-project/example-build-service"}],"description":"ID of the build service to deploy"},"branch":{"type":"string","description":"Branch to deploy","example":"master"},"buildSHA":{"oneOf":[{"type":"string","minLength":40,"maxLength":40,"description":"A commit sha."},{"type":"string","enum":["latest"],"description":"Latest commit."}],"description":"Commit SHA to deploy, or 'latest' to deploy the most recent commit","example":"latest"},"buildId":{"type":"string","description":"ID of the build that should be deployed","example":"premium-guide-6393"}},"additionalProperties":false},"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"required":["internal"],"additionalProperties":false,"description":"An internal deployment"},{"type":"object","properties":{"buildpack":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customProcess","customCommand","customEntrypointCustomCommand","originalEntrypointCustomCommand"],"description":"Type of buildpack run configuration"},"customProcess":{"type":"string","description":"Custom process which should be run. Required in case where `configType` is `customProcess`"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be run. Required in case where `configType` is `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be run. Required in case where `configType` is `customCommand`, `customEntrypointCustomCommand` or `originalEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of buildpack runtime"},"docker":{"type":"object","properties":{"configType":{"type":"string","enum":["default","customEntrypoint","customCommand","customEntrypointCustomCommand"],"description":"Type of entrypoint & command override configuration","example":"default"},"customEntrypoint":{"type":"string","description":"Custom entrypoint which should be used. Required in case where `configType` is `customEntrypoint` or `customEntrypointCustomCommand`"},"customCommand":{"type":"string","description":"Custom command which should be used. Required in case where `configType` is `customCommand` or `customEntrypointCustomCommand`"}},"required":["configType"],"additionalProperties":false,"description":"Allows for customization of docker runtime"}},"additionalProperties":false,"description":"Don't modify the deployment"}],"description":"Deployment type"}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","deployment"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--deployments-get":{"operationId":"getProjectsServicesServiceidDeployments","summary":"List service deployments","description":"Lists the deployments of the given service, newest first. For services using a gradual rollout strategy each deployment also reports the release type it was created as.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"releaseType","type":"string","enum":["stable","canary"],"description":"Only return deployments whose current gradual rollout release type matches. Release type tracks the current role rather than how the deployment was created, so promoting a canary moves it out of the `canary` results and into `stable`. Deployments of services that do not use a gradual rollout strategy have no release type and are excluded when this is set.","example":"canary","in":"query","schema":{"name":"releaseType","type":"string","enum":["stable","canary"],"description":"Only return deployments whose current gradual rollout release type matches. Release type tracks the current role rather than how the deployment was created, so promoting a canary moves it out of the `canary` results and into `stable`. Deployments of services that do not use a gradual rollout strategy have no release type and are excluded when this is set.","example":"canary","in":"query"}}],"responses":{"200":{"description":"A list of deployments.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"description":"A deployment of a service."},"description":"An array of deployments, newest first."}},"required":["deployments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","service","deployments"]},"v1-projects--projectId--services--serviceId--deployments-get-team-scoped":{"operationId":"getProjectsServicesServiceidDeployments","summary":"List service deployments","description":"Lists the deployments of the given service, newest first. For services using a gradual rollout strategy each deployment also reports the release type it was created as.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"releaseType","type":"string","enum":["stable","canary"],"description":"Only return deployments whose current gradual rollout release type matches. Release type tracks the current role rather than how the deployment was created, so promoting a canary moves it out of the `canary` results and into `stable`. Deployments of services that do not use a gradual rollout strategy have no release type and are excluded when this is set.","example":"canary","in":"query","schema":{"name":"releaseType","type":"string","enum":["stable","canary"],"description":"Only return deployments whose current gradual rollout release type matches. Release type tracks the current role rather than how the deployment was created, so promoting a canary moves it out of the `canary` results and into `stable`. Deployments of services that do not use a gradual rollout strategy have no release type and are excluded when this is set.","example":"canary","in":"query"}}],"responses":{"200":{"description":"A list of deployments.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"deployments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"description":"A deployment of a service."},"description":"An array of deployments, newest first."}},"required":["deployments"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","service","deployments"]},"v1-projects--projectId--services--serviceId--health-checks-get":{"operationId":"getProjectsServicesServiceidHealthChecks","summary":"Get service health checks","description":"Lists the health checks for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the health checks for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","nullable":true,"description":"The path of the health check endpoint.","example":"/health-check"},"cmd":{"description":"The command to run for the health check."},"httpPort":{"description":"HTTP port number for the health check endpoint.","example":3000},"tcpSocketPort":{"description":"TCP port number for the health check endpoint."},"initialDelaySeconds":{"type":"integer","minimum":1,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":1,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","health-checks"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--health-checks-get-team-scoped":{"operationId":"getProjectsServicesServiceidHealthChecks","summary":"Get service health checks","description":"Lists the health checks for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the health checks for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","nullable":true,"description":"The path of the health check endpoint.","example":"/health-check"},"cmd":{"description":"The command to run for the health check."},"httpPort":{"description":"HTTP port number for the health check endpoint.","example":3000},"tcpSocketPort":{"description":"TCP port number for the health check endpoint."},"initialDelaySeconds":{"type":"integer","minimum":1,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":1,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","health-checks"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--health-checks-post":{"operationId":"postProjectsServicesServiceidHealthChecks","summary":"Update service health checks","description":"Updates health checks for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","health-checks"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--health-checks-post-team-scoped":{"operationId":"postProjectsServicesServiceidHealthChecks","summary":"Update service health checks","description":"Updates health checks for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"healthChecks":{"type":"array","items":{"type":"object","properties":{"protocol":{"type":"string","enum":["HTTP","CMD","TCP"],"description":"The protocol to access the health check with.","example":"HTTP"},"type":{"type":"string","enum":["livenessProbe","readinessProbe","startupProbe"],"description":"The type of health check.","example":"readinessProbe"},"path":{"type":"string","pattern":"^\\/([a-zA-Z0-9-._]+\\/)*[a-zA-Z0-9-._]*((\\?([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)(&([a-zA-Z0-9-._]+(=[a-zA-Z0-9-._]+)?)*)*)?$","description":"The path of the health check endpoint. Required when protocol is HTTP.","example":"/health-check"},"cmd":{"type":"string","description":"The command to run for the health check. Required when protocol is CMD"},"port":{"type":"integer","minimum":1,"description":"Port number for the health check endpoint. Required when protocol is HTTP.","example":8080},"initialDelaySeconds":{"type":"integer","minimum":1,"maximum":1800,"description":"Initial delay, in seconds, before the health check is first run.","example":10},"periodSeconds":{"type":"integer","minimum":10,"maximum":600,"description":"The time between each check, in seconds.","example":60},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":60,"description":"The time to wait for a response before marking the health check as a failure.","example":1},"failureThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The maximum number of allowed failures.","example":3},"successThreshold":{"type":"integer","minimum":1,"maximum":255,"description":"The number of successes required to mark the health check as a success.","example":1}},"required":["protocol","type","initialDelaySeconds","periodSeconds","timeoutSeconds","failureThreshold"],"additionalProperties":false,"description":"A health check object."},"description":"An array of health checks."}},"required":["healthChecks"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","health-checks"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--logs-get":{"operationId":"getProjectsServicesServiceidLogs","summary":"Get service logs","description":"Get logs for a service","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query","schema":{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","logs"]},"v1-projects--projectId--services--serviceId--logs-get-team-scoped":{"operationId":"getProjectsServicesServiceidLogs","summary":"Get service logs","description":"Get logs for a service","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query","schema":{"name":"deploymentId","type":"string","description":"Limit logs to a specific deployment.","example":"latest","in":"query"}},{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"type","type":"string","enum":["cdn","mesh","ingress","runtime","build","backup","restore"],"description":"Type of log. Multiple log types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"containerName","description":"Limits logs to specific container(s). Multiple containers can be selected by specifying the query parameter repeatedly.","example":"my-container-67d6d748c5-kgvwh","default":"all","in":"query","schema":{"anyOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":64},"maxItems":50},{"type":"string","minLength":3,"maxLength":64}]}},{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query","schema":{"name":"queryType","type":"string","enum":["range"],"description":"`range` selects a log range and returns immediately.","example":"range","default":"range","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch logs generated after this timestamp.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch logs generated before this timestamp.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query","schema":{"name":"lineLimit","type":"number","format":"float","minimum":0,"maximum":1000,"description":"Number of log lines to fetch.","example":250,"in":"query"}},{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query","schema":{"name":"direction","type":"string","enum":["backward","forward"],"description":"Ordering of log lines","example":"backward","default":"backward","in":"query"}},{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query","schema":{"name":"textIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this search string","example":"myvalue","in":"query"}},{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query","schema":{"name":"textNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this search string","example":"myvalue","in":"query"}},{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to match this regular expression","example":"my.*value","in":"query"}},{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query","schema":{"name":"regexNotIncludes","type":"string","minLength":1,"maxLength":100,"description":"Filter log lines to not match this regular expression","example":"my.*value","in":"query"}}],"responses":{"200":{"description":"List of logs values","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"containerId":{"type":"string"},"log":{"example":"stdout F This is a log line"},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["containerId","log","ts"],"additionalProperties":false},"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-link":"undefined/v1/api/log-tailing","x-nf-link-description":"For more information on live log tailing, see our documentation page.","x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","logs"]},"v1-projects--projectId--services--serviceId--metrics-get":{"operationId":"getProjectsServicesServiceidMetrics","summary":"Get service metrics","description":"Get metrics for a service","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query"}},{"name":"deploymentId","type":"string","description":"Limits metrics to a specific deployment","examples":["latest","latest"],"in":"query","schema":{"name":"deploymentId","type":"string","description":"Limits metrics to a specific deployment","examples":["latest","latest"],"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","service","metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","service","metrics"]}],"x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","metrics"]},"v1-projects--projectId--services--serviceId--metrics-get-team-scoped":{"operationId":"getProjectsServicesServiceidMetrics","summary":"Get service metrics","description":"Get metrics for a service","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query","schema":{"name":"queryType","type":"string","enum":["range","single"],"description":"Selects metrics for specified timestamp.","examples":["range","single"],"default":"single","in":"query"}},{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query","schema":{"name":"metricTypes","type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly.","in":"query"}},{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"startTime","type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z","in":"query"}},{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query","schema":{"name":"endTime","type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z","in":"query"}},{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query","schema":{"name":"duration","type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600,"in":"query"}},{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query","schema":{"name":"containerName","type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","examples":["my-container-67d6d748c5-kgvwh","my-container-67d6d748c5-kgvwh"],"default":"all","in":"query"}},{"name":"deploymentId","type":"string","description":"Limits metrics to a specific deployment","examples":["latest","latest"],"in":"query","schema":{"name":"deploymentId","type":"string","description":"Limits metrics to a specific deployment","examples":["latest","latest"],"in":"query"}},{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query","schema":{"name":"time","type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z","in":"query"}}],"responses":{"200":{"description":"List of metrics values","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"cpu":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"memory":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkIngress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"networkEgress":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"tcpConnectionsOpen":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"diskUsage":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"requests":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http4xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"http5xxResponses":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidth":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false},"bandwidthVolume":{"type":"object","properties":{"metricInfo":{"type":"object","properties":{"metricId":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric to fetch"},"metricUnit":{"type":"string","enum":["pct","vCPU","mb","kbps","rps","count"],"example":"pct"},"metricResolution":{"type":"number","format":"float","example":10}},"required":["metricId","metricUnit"],"additionalProperties":false},"values":{"type":"array","items":{"type":"object","properties":{"metadata":{"type":"object","properties":{"containerId":{"type":"string","example":"nginx-669cc865b7-5458n"},"volumeId":{"type":"string","example":"data-volume-1"}},"required":["containerId"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","format":"float","example":0.5},"ts":{"type":"string","format":"date-time","example":"2023-03-21T15:01:17.310Z"}},"required":["value","ts"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}},"required":["values"],"additionalProperties":false}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-jsclient":[{"title":"Range","description":"Query over a range","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"startTime":{"type":"string","format":"date-time","description":"Fetch metrics generated after this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T14:00:00.000Z"},"endTime":{"type":"string","format":"date-time","description":"Fetch metrics generated before this timestamp. Only valid for queryType: `range`.","example":"2023-02-16T15:00:00.000Z"},"duration":{"type":"integer","description":"Range duration in seconds. If set, only one of `startTime` or `endTime` can be set.","example":600}},"additionalProperties":false},"x-nf-cli-command":["get","service","metrics-range"]},{"title":"Single","description":"Query a specific timestamp","schema":{"type":"object","properties":{"containerName":{"type":"string","minLength":3,"maxLength":64,"description":"Limits metrics to a specific container.","example":"my-container-67d6d748c5-kgvwh","default":"all"},"metricTypes":{"type":"string","enum":["cpu","memory","networkIngress","networkEgress","tcpConnectionsOpen","diskUsage","requests","http4xxResponses","http5xxResponses","bandwidth","bandwidthVolume"],"description":"Type of metric. Multiple metric types can be selected by specifying the query parameter repeatedly."},"timestamp":{"type":"string","format":"date-time","description":"Fetch metrics at this timestamp. If not provided will use current time. Only valid for queryType: `single`.","example":"2023-02-16T14:00:00.000Z"}},"additionalProperties":false},"x-nf-cli-command":["get","service","metrics"]}],"x-nf-permission-required":"Project > Services > Deployment > View Observability","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","metrics"]},"v1-projects--projectId--services--serviceId--pause-post":{"operationId":"postProjectsServicesServiceidPause","summary":"Pause service","description":"Pause the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","service"]},"v1-projects--projectId--services--serviceId--pause-post-team-scoped":{"operationId":"postProjectsServicesServiceidPause","summary":"Pause service","description":"Pause the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["pause","service"]},"v1-projects--projectId--services--serviceId--per-replica-volumes-get":{"operationId":"getProjectsServicesServiceidPerReplicaVolumes","summary":"Get service per-replica volumes","description":"Lists the per-replica statefulSet volumes for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The list of per-replica volumes for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true,"description":"The user-facing slug of the volume definition, or null when the definition has already been purged but a retained PVC is still being reported."},"slug":{"type":"string","nullable":true,"description":"Best-effort display slug for a purged (definitionMissing) group, recovered from the PVC labels so the group keeps its original name. Equal to `id` when the definition exists."},"definitionMissing":{"type":"boolean","description":"True when the volume definition no longer exists. Its retained PVCs remain individually deletable, but the group DELETE endpoint cannot target the missing definition."},"pendingDelete":{"type":"boolean","description":"True if the volume has been removed from the service and only its retained orphaned PVCs remain. When definitionMissing is false, the group can be fully deleted via the group DELETE endpoint; definition-missing groups are reclaimed by background cleanup."},"cleanupPending":{"type":"boolean","description":"True when the group's definition is already purged and the background reaper owns removing the retained PVCs — no manual delete is possible (its replicas report deletable: false)."},"replicas":{"type":"array","items":{"type":"object","properties":{"ordinal":{"type":"number","format":"float","description":"The statefulSet replica ordinal this PVC belongs to."},"pvcName":{"type":"string","description":"The name of the per-replica PVC."},"deletable":{"type":"boolean","description":"True if the PVC can be deleted now via the per-replica DELETE endpoint: it is orphaned (its volume was removed or its ordinal is scaled down) AND its volume definition still exists. Bound PVCs are refused with 409; claims of a purged volume are false (see group cleanupPending)."}},"required":["ordinal","pvcName","deletable"],"additionalProperties":false},"description":"The per-replica PVCs of this volume."}},"required":["id","definitionMissing","pendingDelete","cleanupPending","replicas"],"additionalProperties":false},"description":"The per-replica statefulSet volumes grouped by volume definition."}},"required":["volumes"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","per-replica-volumes"]},"v1-projects--projectId--services--serviceId--per-replica-volumes-get-team-scoped":{"operationId":"getProjectsServicesServiceidPerReplicaVolumes","summary":"Get service per-replica volumes","description":"Lists the per-replica statefulSet volumes for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The list of per-replica volumes for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"volumes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","nullable":true,"description":"The user-facing slug of the volume definition, or null when the definition has already been purged but a retained PVC is still being reported."},"slug":{"type":"string","nullable":true,"description":"Best-effort display slug for a purged (definitionMissing) group, recovered from the PVC labels so the group keeps its original name. Equal to `id` when the definition exists."},"definitionMissing":{"type":"boolean","description":"True when the volume definition no longer exists. Its retained PVCs remain individually deletable, but the group DELETE endpoint cannot target the missing definition."},"pendingDelete":{"type":"boolean","description":"True if the volume has been removed from the service and only its retained orphaned PVCs remain. When definitionMissing is false, the group can be fully deleted via the group DELETE endpoint; definition-missing groups are reclaimed by background cleanup."},"cleanupPending":{"type":"boolean","description":"True when the group's definition is already purged and the background reaper owns removing the retained PVCs — no manual delete is possible (its replicas report deletable: false)."},"replicas":{"type":"array","items":{"type":"object","properties":{"ordinal":{"type":"number","format":"float","description":"The statefulSet replica ordinal this PVC belongs to."},"pvcName":{"type":"string","description":"The name of the per-replica PVC."},"deletable":{"type":"boolean","description":"True if the PVC can be deleted now via the per-replica DELETE endpoint: it is orphaned (its volume was removed or its ordinal is scaled down) AND its volume definition still exists. Bound PVCs are refused with 409; claims of a purged volume are false (see group cleanupPending)."}},"required":["ordinal","pvcName","deletable"],"additionalProperties":false},"description":"The per-replica PVCs of this volume."}},"required":["id","definitionMissing","pendingDelete","cleanupPending","replicas"],"additionalProperties":false},"description":"The per-replica statefulSet volumes grouped by volume definition."}},"required":["volumes"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","per-replica-volumes"]},"v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--delete":{"operationId":"deleteProjectsServicesServiceidPerReplicaVolumesVolumeVolumeid","summary":"Delete service per-replica volume group","description":"Fully deletes a removed per-replica statefulSet volume for the given service: all of its orphaned PVCs and the volume definition. The volume must first be removed from the service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","service","per-replica-volume-group"]},"v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--delete-team-scoped":{"operationId":"deleteProjectsServicesServiceidPerReplicaVolumesVolumeVolumeid","summary":"Delete service per-replica volume group","description":"Fully deletes a removed per-replica statefulSet volume for the given service: all of its orphaned PVCs and the volume definition. The volume must first be removed from the service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","service","per-replica-volume-group"]},"v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--replica--ordinal--delete":{"operationId":"deleteProjectsServicesServiceidPerReplicaVolumesVolumeVolumeidReplicaOrdinal","summary":"Delete service per-replica volume PVC","description":"Deletes one orphaned per-replica statefulSet volume PVC — a scaled-down ordinal, or a replica of a removed volume. Replicas still bound to a running instance are refused with 409.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path"}},{"name":"ordinal","type":"string","required":true,"description":"StatefulSet replica ordinal the PVC belongs to","example":"2","pattern":"^\\d+$","in":"path","schema":{"name":"ordinal","type":"string","required":true,"description":"StatefulSet replica ordinal the PVC belongs to","example":"2","pattern":"^\\d+$","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","service","per-replica-volume"]},"v1-projects--projectId--services--serviceId--per-replica-volumes-volume--volumeId--replica--ordinal--delete-team-scoped":{"operationId":"deleteProjectsServicesServiceidPerReplicaVolumesVolumeVolumeidReplicaOrdinal","summary":"Delete service per-replica volume PVC","description":"Deletes one orphaned per-replica statefulSet volume PVC — a scaled-down ordinal, or a replica of a removed volume. Replicas still bound to a running instance are refused with 409.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the per-replica volume","example":"data","in":"path"}},{"name":"ordinal","type":"string","required":true,"description":"StatefulSet replica ordinal the PVC belongs to","example":"2","pattern":"^\\d+$","in":"path","schema":{"name":"ordinal","type":"string","required":true,"description":"StatefulSet replica ordinal the PVC belongs to","example":"2","pattern":"^\\d+$","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","service","per-replica-volume"]},"v1-projects--projectId--services--serviceId--ports-get":{"operationId":"getProjectsServicesServiceidPorts","summary":"Get service ports","description":"Lists the ports for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the ports for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id used to identify the port across requests.","example":"eonyui"},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The name of the port used in the public url and UI.","example":"p01"},"internalPort":{"type":"integer","description":"The port number.","example":8080},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol used by the port.","example":"HTTP"},"public":{"type":"boolean","description":"If true, the port is exposed publicly.","example":true},"vpcAccessible":{"type":"boolean","description":"If true, the port is exposed on the cluster's private (VPC) load balancer.","example":false},"dns":{"type":"string","description":"DNS entry for this port.","example":"p01--example-service--default-service--user-abc1.salvo.code.run"},"vpcDns":{"type":"string","description":"VPC DNS entry for this port.","example":"p01--example-service--default-service--user-abc1--vpc.salvo.code.run"},"domains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The custom domain redirecting to this port.","example":"app.example.com"},"certificate":{"type":"object","properties":{"inProgress":{"type":"boolean","description":"Is the certificate in the process of being generated?","example":false},"expiryDate":{"type":"string","format":"date-time","description":"The timestamp when the TLS certificate will expire.","example":"2022-04-26T09:25:02.000Z"},"refreshDate":{"type":"string","format":"date-time","description":"The timestamp when a new TLS certificate will be generated.","example":"2022-03-27T09:25:02.000Z"}},"additionalProperties":false,"description":"Details about the TLS certificate generation for this domain."}},"required":["name","certificate"],"additionalProperties":false},"description":"An array of domains that redirect to this port."},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"Organization ID of the work OS organization that should be validated.","example":"org_uniquestringidentifier"},"directoryGroupIds":{"type":"array","items":{"type":"string","example":"directory_group_uniquestringidentifier"},"description":"List of directory groupIds, one of which the user has to be a member of."},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow","default":false},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain","default":false},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect","default":false},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow","default":false}},"additionalProperties":false,"description":"Configure SSO access control for this port."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"headers":{"type":"array","items":{"type":"object","properties":{"regexMode":{"type":"boolean","default":false},"name":{"oneOf":[{"type":"string","x-required":true},{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","x-required":true}]},"value":{"type":"string"}},"required":["value"],"additionalProperties":false},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false,"description":"Details about security settings for this port."},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","example":false}},"required":["id","name","internalPort","protocol","public","domains"],"additionalProperties":false},"description":"An array of ports of the service."}},"required":["ports"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","ports"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--ports-get-team-scoped":{"operationId":"getProjectsServicesServiceidPorts","summary":"Get service ports","description":"Lists the ports for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the ports for the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id used to identify the port across requests.","example":"eonyui"},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","description":"The name of the port used in the public url and UI.","example":"p01"},"internalPort":{"type":"integer","description":"The port number.","example":8080},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol used by the port.","example":"HTTP"},"public":{"type":"boolean","description":"If true, the port is exposed publicly.","example":true},"vpcAccessible":{"type":"boolean","description":"If true, the port is exposed on the cluster's private (VPC) load balancer.","example":false},"dns":{"type":"string","description":"DNS entry for this port.","example":"p01--example-service--default-service--user-abc1.salvo.code.run"},"vpcDns":{"type":"string","description":"VPC DNS entry for this port.","example":"p01--example-service--default-service--user-abc1--vpc.salvo.code.run"},"domains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The custom domain redirecting to this port.","example":"app.example.com"},"certificate":{"type":"object","properties":{"inProgress":{"type":"boolean","description":"Is the certificate in the process of being generated?","example":false},"expiryDate":{"type":"string","format":"date-time","description":"The timestamp when the TLS certificate will expire.","example":"2022-04-26T09:25:02.000Z"},"refreshDate":{"type":"string","format":"date-time","description":"The timestamp when a new TLS certificate will be generated.","example":"2022-03-27T09:25:02.000Z"}},"additionalProperties":false,"description":"Details about the TLS certificate generation for this domain."}},"required":["name","certificate"],"additionalProperties":false},"description":"An array of domains that redirect to this port."},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"Organization ID of the work OS organization that should be validated.","example":"org_uniquestringidentifier"},"directoryGroupIds":{"type":"array","items":{"type":"string","example":"directory_group_uniquestringidentifier"},"description":"List of directory groupIds, one of which the user has to be a member of."},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow","default":false},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain","default":false},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect","default":false},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow","default":false}},"additionalProperties":false,"description":"Configure SSO access control for this port."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"headers":{"type":"array","items":{"type":"object","properties":{"regexMode":{"type":"boolean","default":false},"name":{"oneOf":[{"type":"string","x-required":true},{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","x-required":true}]},"value":{"type":"string"}},"required":["value"],"additionalProperties":false},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false,"description":"Details about security settings for this port."},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","example":false}},"required":["id","name","internalPort","protocol","public","domains"],"additionalProperties":false},"description":"An array of ports of the service."}},"required":["ports"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","ports"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--ports-post":{"operationId":"postProjectsServicesServiceidPorts","summary":"Update service ports","description":"Updates the list of ports for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"One of the provided domains has not been registered to this account."}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id of an existing port. Pass this when changing in order to keep security configurations.","example":"p01"},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port. Public and VPC-accessible ports only support `HTTP` and `HTTP/2`.","example":"HTTP"},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"not":{"enum":[15000,15020,65000]},"description":"The port number.","example":12345},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false}},"required":["protocol","name","internalPort"],"additionalProperties":false},"uniqueItems":true,"description":"An array of ports to replace or update existing ports with."}},"required":["ports"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","ports"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--ports-post-team-scoped":{"operationId":"postProjectsServicesServiceidPorts","summary":"Update service ports","description":"Updates the list of ports for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"One of the provided domains has not been registered to this account."}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"ports":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z]-?[a-z0-9]+(-[a-z0-9]+)*$","description":"The id of an existing port. Pass this when changing in order to keep security configurations.","example":"p01"},"protocol":{"type":"string","enum":["HTTP","HTTP/2","TCP","UDP"],"description":"The protocol to use for the port. Public and VPC-accessible ports only support `HTTP` and `HTTP/2`.","example":"HTTP"},"name":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":1,"maxLength":8,"description":"The name used to identify the port.","example":"p01"},"internalPort":{"type":"integer","minimum":1,"maximum":65535,"not":{"enum":[15000,15020,65000]},"description":"The port number.","example":12345},"public":{"type":"boolean","description":"If true, the port will be exposed publicly.","example":true,"default":false},"vpcAccessible":{"type":"boolean","description":"If true, the port will be exposed on the cluster's private (VPC) load balancer.","example":false,"default":false},"domains":{"type":"array","items":{"type":"string","description":"A domain to redirect to this port.","example":"app.example.com"},"description":"An array of domains to redirect to this port. Each domain must first be verified and registered to your account.","default":[]},"security":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."},"verificationMode":{"type":"string","enum":["or","and"],"description":"Mode used to verify multiple security features like ip policies and SSO authentication"},"securePathConfiguration":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable security policies on a path-level style"},"skipSecurityPoliciesForInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip all security policies"},"rules":{"type":"array","items":{"type":"object","properties":{"paths":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["prefix"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"prefix"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path starts with the provided prefix."},{"type":"object","properties":{"path":{"type":"string","pattern":"^\\/([_a-zA-Z0-9-&?=.]*)((\\/[_a-zA-Z0-9-&?=.]+)*(\\/)?)?$"},"routingMode":{"type":"string","enum":["exact"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"exact"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path is an exact match."},{"type":"object","properties":{"path":{"type":"string"},"routingMode":{"type":"string","enum":["regex"],"description":"Mode of the path, determining how the URI will be interpreted.","example":"regex"},"priority":{"type":"integer","minimum":0,"maximum":100,"example":80}},"required":["path","routingMode","priority"],"additionalProperties":false,"description":"Route when the path matches the provided regex."}],"description":"Data about how the path should be handled."},"description":"Array of path objects which represent the paths and their priority for which the security policies will be enforced"},"accessMode":{"type":"string","enum":["protected","unprotected"],"description":"Specify the way the path rule will behave when processing policies. This enables an allow-list/deny-list approach for access control on each path","example":"protected"},"securityPolicies":{"type":"object","properties":{"orPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false},"requiredPolicies":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The username to access the service","example":"admin"},"password":{"type":"string","description":"The password to access the service with this username.","example":"password123"},"type":{"type":"string","enum":["basic-auth"],"description":"The type of authentication used","example":"basic-auth"}},"required":["username","password","type"],"additionalProperties":false},"description":"An array of credentials to access the service."},"ip":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"policies":{"type":"array","items":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","description":"An IP address used by this rule","example":"127.0.0.1"},"description":"An array of IP addresses used for this rule"},"action":{"type":"string","enum":["ALLOW","DENY"],"description":"The action for this rule.","example":"DENY"}},"required":["addresses","action"],"additionalProperties":false},"description":"An array of IP address policies."},"sso":{"type":"object","properties":{"organizationId":{"type":"string","description":"ID of the SSO organization that the user will have to be a member of"},"directoryGroupIds":{"type":"array","items":{"type":"string"},"description":"Array of directory groups that will have access"},"allowAnyOrgUsers":{"type":"boolean","description":"Allow entire organization to access this service"},"validateInternalTraffic":{"type":"boolean","description":"Enforce internal traffic through SSO authentication flow"},"setCookieOnRootDomain":{"type":"boolean","description":"Set SSO authentication cookie on root domain"},"noindexRedirect":{"type":"boolean","description":"Add an X-Robots-Tag: noindex response header to the SSO authentication redirect"},"allowInternalTrafficViaPublicDns":{"type":"boolean","description":"Allow internal traffic from same or shared projects via public DNS to skip SSO authentication flow"}},"additionalProperties":false,"description":"Configure port authentication via SSO"},"headers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"regexMode":{"type":"boolean","example":false,"default":false},"name":{"type":"string","pattern":"^[a-zA-Z0-9_\\-%$+]+$","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as strings."},{"type":"object","properties":{"regexMode":{"type":"boolean","example":true,"default":false},"name":{"type":"string","example":"headerName"},"value":{"type":"string","example":"headerValue"}},"required":["name","value"],"additionalProperties":false,"description":"Matches provided headers as regex."}]},"description":"List of header authentication settings, it checks the presence of all headers and compares it against the expected value. Wildcard (*) is supported."}},"additionalProperties":false}},"additionalProperties":false}},"required":["paths","accessMode"],"additionalProperties":false},"default":[]}},"additionalProperties":false}},"additionalProperties":false,"default":{"credentials":[],"policies":[],"sso":{}}},"disableNfDomain":{"type":"boolean","description":"Disable routing on the default code.run domain for public HTTP ports with custom domains.","default":false}},"required":["protocol","name","internalPort"],"additionalProperties":false},"uniqueItems":true,"description":"An array of ports to replace or update existing ports with."}},"required":["ports"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","ports"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--pull-requests-get":{"operationId":"getProjectsServicesServiceidPullRequests","summary":"Get service pull requests","description":"Gets information about the pull-requests of the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the service's available pull requests.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pullRequests":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"Provider identifier of the pull request.","example":1},"state":{"type":"string","description":"Status of the pull request.","example":"OPEN"},"title":{"type":"string","description":"Title of the pull request.","example":"Add new feature handling"},"source":{"type":"string","description":"Name of the branch the pull request is merging from.","example":"feature/new-feature"},"destination":{"type":"string","description":"Name of the branch the pull request is being merged into.","example":"main"},"sha":{"type":"string","description":"SHA of the most recent commit of the pull request.","example":"4f101d8821aeb3e4f81f95f3e886a2759ba7b9db"},"created_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was opened.","example":"2021-03-22T11:05:52.000Z"},"updated_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was last updated at.","example":"2021-05-11T16:05:43.000Z"},"html_url":{"type":"string"}},"required":["id","state","title","source","destination","sha","created_at","updated_at","html_url"],"additionalProperties":false,"description":"Details about a pull request."},"description":"A list of pull requests for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","pull-requests"]},"v1-projects--projectId--services--serviceId--pull-requests-get-team-scoped":{"operationId":"getProjectsServicesServiceidPullRequests","summary":"Get service pull requests","description":"Gets information about the pull-requests of the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Data about the service's available pull requests.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pullRequests":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"integer"},{"type":"string"}],"description":"Provider identifier of the pull request.","example":1},"state":{"type":"string","description":"Status of the pull request.","example":"OPEN"},"title":{"type":"string","description":"Title of the pull request.","example":"Add new feature handling"},"source":{"type":"string","description":"Name of the branch the pull request is merging from.","example":"feature/new-feature"},"destination":{"type":"string","description":"Name of the branch the pull request is being merged into.","example":"main"},"sha":{"type":"string","description":"SHA of the most recent commit of the pull request.","example":"4f101d8821aeb3e4f81f95f3e886a2759ba7b9db"},"created_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was opened.","example":"2021-03-22T11:05:52.000Z"},"updated_at":{"type":"string","format":"date-time","description":"The timestamp the pull request was last updated at.","example":"2021-05-11T16:05:43.000Z"},"html_url":{"type":"string"}},"required":["id","state","title","source","destination","sha","created_at","updated_at","html_url"],"additionalProperties":false,"description":"Details about a pull request."},"description":"A list of pull requests for this repository."}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","pull-requests"]},"v1-projects--projectId--services--serviceId--restart-post":{"operationId":"postProjectsServicesServiceidRestart","summary":"Restart service","description":"Restarts the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restart","service"]},"v1-projects--projectId--services--serviceId--restart-post-team-scoped":{"operationId":"postProjectsServicesServiceidRestart","summary":"Restart service","description":"Restarts the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["restart","service"]},"v1-projects--projectId--services--serviceId--resume-post":{"operationId":"postProjectsServicesServiceidResume","summary":"Resume service","description":"Resumes the given service. Optionally takes several arguments to override resumed settings.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The service could not be resumed as it is not paused."}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"instances":{"type":"integer","minimum":0,"description":"The number of instances to scale the service to upon resuming","example":1},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether CD should be disabled","example":false},"enableAutoscaling":{"type":"boolean","description":"Whether to restore autoscaling on resume. Defaults to the autoscaling state captured when the service was paused. Set to false to resume without autoscaling; it cannot enable autoscaling that was not active before the pause","example":true}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","service"]},"v1-projects--projectId--services--serviceId--resume-post-team-scoped":{"operationId":"postProjectsServicesServiceidResume","summary":"Resume service","description":"Resumes the given service. Optionally takes several arguments to override resumed settings.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"The service could not be resumed as it is not paused."}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"instances":{"type":"integer","minimum":0,"description":"The number of instances to scale the service to upon resuming","example":1},"disabledCI":{"type":"boolean","description":"Whether CI should be disabled","example":false},"disabledCD":{"type":"boolean","description":"Whether CD should be disabled","example":false},"enableAutoscaling":{"type":"boolean","description":"Whether to restore autoscaling on resume. Defaults to the autoscaling state captured when the service was paused. Set to false to resume without autoscaling; it cannot enable autoscaling that was not active before the pause","example":true}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["resume","service"]},"v1-projects--projectId--services--serviceId--rollout-get":{"operationId":"getProjectsServicesServiceidRollout","summary":"Get service rollout","description":"Gets the active gradual rollout of the given service, including the traffic configuration, the stable and canary deployments, and previous traffic configurations.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The active rollout of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"strategyId":{"type":"string","nullable":true,"description":"ID of the gradual rollout strategy this rollout was created from. Null if the strategy has since been deleted.","example":"example-gradual-rollout-strategy"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy.","example":"canary"},"promoted":{"type":"boolean","description":"Whether the canary has been promoted to stable. A promoted rollout serves all traffic from the canary deployment and can no longer be reconfigured.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Time the rollout started.","example":"2024-01-15T10:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Time the rollout was last changed.","example":"2024-01-15T11:30:00.000Z"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false,"description":"Conditions under which a new release automatically starts a gradual rollout."},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"Whether new deployments are blocked while this rollout is in progress."}},"additionalProperties":false,"description":"Options inherited from the gradual rollout strategy."},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"How traffic is split between the stable and canary deployments.","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"x-required":true}],"description":"Configuration for the active canary strategy."}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Traffic configuration of the rollout."},"stableDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving stable traffic."},"canaryDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving canary traffic."},"history":{"type":"array","items":{"type":"object","properties":{"config":{"anyOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false}],"description":"The traffic split or header configuration that was replaced."},"updatedAt":{"type":"string","format":"date-time","description":"Time the split was applied.","example":"2024-01-15T10:45:00.000Z"}},"required":["config","updatedAt"],"additionalProperties":false},"description":"Previous traffic configurations of this rollout, oldest first."}},"required":["strategyId","type","promoted","createdAt","updatedAt","details","stableDeployment","canaryDeployment","history"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"The service does not have an active gradual rollout."}},"tags":["Rollout Strategies","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","rollout"]},"v1-projects--projectId--services--serviceId--rollout-get-team-scoped":{"operationId":"getProjectsServicesServiceidRollout","summary":"Get service rollout","description":"Gets the active gradual rollout of the given service, including the traffic configuration, the stable and canary deployments, and previous traffic configurations.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The active rollout of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"strategyId":{"type":"string","nullable":true,"description":"ID of the gradual rollout strategy this rollout was created from. Null if the strategy has since been deleted.","example":"example-gradual-rollout-strategy"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy.","example":"canary"},"promoted":{"type":"boolean","description":"Whether the canary has been promoted to stable. A promoted rollout serves all traffic from the canary deployment and can no longer be reconfigured.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Time the rollout started.","example":"2024-01-15T10:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Time the rollout was last changed.","example":"2024-01-15T11:30:00.000Z"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false,"description":"Conditions under which a new release automatically starts a gradual rollout."},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"Whether new deployments are blocked while this rollout is in progress."}},"additionalProperties":false,"description":"Options inherited from the gradual rollout strategy."},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"How traffic is split between the stable and canary deployments.","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"x-required":true}],"description":"Configuration for the active canary strategy."}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Traffic configuration of the rollout."},"stableDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving stable traffic."},"canaryDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving canary traffic."},"history":{"type":"array","items":{"type":"object","properties":{"config":{"anyOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false}],"description":"The traffic split or header configuration that was replaced."},"updatedAt":{"type":"string","format":"date-time","description":"Time the split was applied.","example":"2024-01-15T10:45:00.000Z"}},"required":["config","updatedAt"],"additionalProperties":false},"description":"Previous traffic configurations of this rollout, oldest first."}},"required":["strategyId","type","promoted","createdAt","updatedAt","details","stableDeployment","canaryDeployment","history"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"The service does not have an active gradual rollout."}},"tags":["Rollout Strategies","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","rollout"]},"v1-projects--projectId--services--serviceId--rollout-configuration-post":{"operationId":"postProjectsServicesServiceidRolloutConfiguration","summary":"Update service rollout configuration","description":"Updates the traffic split of the active gradual rollout. Only percentage based rollouts can be reconfigured. Setting the canary to 100% promotes the rollout.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The rollout after the configuration was applied.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"strategyId":{"type":"string","nullable":true,"description":"ID of the gradual rollout strategy this rollout was created from. Null if the strategy has since been deleted.","example":"example-gradual-rollout-strategy"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy.","example":"canary"},"promoted":{"type":"boolean","description":"Whether the canary has been promoted to stable. A promoted rollout serves all traffic from the canary deployment and can no longer be reconfigured.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Time the rollout started.","example":"2024-01-15T10:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Time the rollout was last changed.","example":"2024-01-15T11:30:00.000Z"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false,"description":"Conditions under which a new release automatically starts a gradual rollout."},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"Whether new deployments are blocked while this rollout is in progress."}},"additionalProperties":false,"description":"Options inherited from the gradual rollout strategy."},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"How traffic is split between the stable and canary deployments.","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"x-required":true}],"description":"Configuration for the active canary strategy."}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Traffic configuration of the rollout."},"stableDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving stable traffic."},"canaryDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving canary traffic."},"history":{"type":"array","items":{"type":"object","properties":{"config":{"anyOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false}],"description":"The traffic split or header configuration that was replaced."},"updatedAt":{"type":"string","format":"date-time","description":"Time the split was applied.","example":"2024-01-15T10:45:00.000Z"}},"required":["config","updatedAt"],"additionalProperties":false},"description":"Previous traffic configurations of this rollout, oldest first."}},"required":["strategyId","type","promoted","createdAt","updatedAt","details","stableDeployment","canaryDeployment","history"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"The service does not have an active gradual rollout."},"409":{"description":"The rollout has been promoted, splits traffic by header, or the canary deployment is not ready."}},"tags":["Rollout Strategies","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"The traffic split to apply to the active rollout."}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","rollout","configuration"]},"v1-projects--projectId--services--serviceId--rollout-configuration-post-team-scoped":{"operationId":"postProjectsServicesServiceidRolloutConfiguration","summary":"Update service rollout configuration","description":"Updates the traffic split of the active gradual rollout. Only percentage based rollouts can be reconfigured. Setting the canary to 100% promotes the rollout.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The rollout after the configuration was applied.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"strategyId":{"type":"string","nullable":true,"description":"ID of the gradual rollout strategy this rollout was created from. Null if the strategy has since been deleted.","example":"example-gradual-rollout-strategy"},"type":{"type":"string","enum":["canary"],"description":"Type of the gradual rollout strategy.","example":"canary"},"promoted":{"type":"boolean","description":"Whether the canary has been promoted to stable. A promoted rollout serves all traffic from the canary deployment and can no longer be reconfigured.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Time the rollout started.","example":"2024-01-15T10:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Time the rollout was last changed.","example":"2024-01-15T11:30:00.000Z"},"options":{"type":"object","properties":{"triggers":{"type":"object","properties":{"releaseFromTemplate":{"type":"boolean","nullable":true},"releaseFromReleaseFlow":{"type":"boolean","nullable":true},"releaseFromCD":{"type":"boolean","nullable":true},"releaseFromUI":{"type":"boolean","nullable":true},"releaseFromApi":{"type":"boolean","nullable":true}},"additionalProperties":false,"description":"Conditions under which a new release automatically starts a gradual rollout."},"blockDeploymentOnActiveRollout":{"type":"boolean","nullable":true,"description":"Whether new deployments are blocked while this rollout is in progress."}},"additionalProperties":false,"description":"Options inherited from the gradual rollout strategy."},"details":{"type":"object","properties":{"canaryStrategy":{"type":"string","enum":["percentage","header"],"description":"How traffic is split between the stable and canary deployments.","example":"percentage"},"config":{"oneOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"x-required":true},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false,"x-required":true}],"description":"Configuration for the active canary strategy."}},"required":["canaryStrategy","config"],"additionalProperties":false,"description":"Traffic configuration of the rollout."},"stableDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving stable traffic."},"canaryDeployment":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the deployment. Use this as the rollback target.","example":"6560a1b2c3d4e5f6a7b8c9d0"},"name":{"type":"string","nullable":true,"description":"Display name of the deployment. Null until the first pod of the deployment has been observed.","example":"example-service-7d9f8b6c5d"},"createdAt":{"type":"string","format":"date-time","description":"Time the deployment was created.","example":"2024-01-15T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the deployment is currently serving traffic. During a gradual rollout both the stable and the canary deployment are active.","example":true},"releaseType":{"type":"string","enum":["stable","canary"],"description":"Current role of the deployment in the gradual rollout. This is mutable: promoting a canary deployment changes its release type to `stable`, so it does not record how the deployment was originally created. Absent for services that do not use a gradual rollout strategy.","example":"canary"},"image":{"type":"object","properties":{"imagePath":{"type":"string","description":"Full path of the deployed image.","example":"nginx:latest"},"image":{"type":"string","description":"Name of the deployed image.","example":"nginx"},"tag":{"type":"string","description":"Tag of the deployed image.","example":"latest"},"sha":{"type":"string","description":"Digest of the deployed image.","example":"sha256:9c8f8d"}},"additionalProperties":false,"description":"The image this deployment is running."},"commit":{"type":"object","properties":{"sha":{"type":"string","description":"Commit the deployed image was built from.","example":"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"},"message":{"type":"string","description":"Commit message.","example":"fix: handle empty payload"},"author":{"type":"string","description":"Login of the commit author.","example":"octocat"},"date":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time"}],"description":"Time the commit was authored.","example":"2024-01-15T10:30:00.000Z"}},"additionalProperties":false,"description":"The source commit this deployment was built from, for git backed services."},"instances":{"type":"number","format":"float","nullable":true,"description":"Number of instances the deployment was created with.","example":2},"reason":{"type":"object","properties":{"id":{"type":"string","description":"Why the deployment was created.","example":"service-updated"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the acting user.","example":"Jane Doe"},"email":{"type":"string","description":"Email of the acting user.","example":"jane@example.com"}},"additionalProperties":false,"description":"The user that caused the deployment, when it was user initiated."}},"additionalProperties":false,"description":"What triggered the deployment."}},"required":["id","createdAt"],"additionalProperties":false,"nullable":true,"description":"The deployment currently serving canary traffic."},"history":{"type":"array","items":{"type":"object","properties":{"config":{"anyOf":[{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false},{"type":"object","properties":{"canaryHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"true"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the canary deployment."},"stableHeader":{"type":"object","properties":{"headerName":{"type":"string","example":"x-canary"},"headerValue":{"type":"string","example":"false"}},"required":["headerName","headerValue"],"additionalProperties":false,"description":"Header that routes traffic to the stable deployment."}},"required":["canaryHeader","stableHeader"],"additionalProperties":false}],"description":"The traffic split or header configuration that was replaced."},"updatedAt":{"type":"string","format":"date-time","description":"Time the split was applied.","example":"2024-01-15T10:45:00.000Z"}},"required":["config","updatedAt"],"additionalProperties":false},"description":"Previous traffic configurations of this rollout, oldest first."}},"required":["strategyId","type","promoted","createdAt","updatedAt","details","stableDeployment","canaryDeployment","history"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"The service does not have an active gradual rollout."},"409":{"description":"The rollout has been promoted, splits traffic by header, or the canary deployment is not ready."}},"tags":["Rollout Strategies","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"canaryPercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the canary deployment. Must sum to 100 with stablePercentage.","example":20},"stablePercentage":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of traffic to route to the stable deployment. Must sum to 100 with canaryPercentage.","example":80}},"required":["canaryPercentage","stablePercentage"],"additionalProperties":false,"description":"The traffic split to apply to the active rollout."}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","rollout","configuration"]},"v1-projects--projectId--services--serviceId--rollout-promote-post":{"operationId":"postProjectsServicesServiceidRolloutPromote","summary":"Promote service rollout","description":"Promotes the canary deployment of the active gradual rollout to stable, routing all traffic to it. This is idempotent: promoting an already promoted rollout succeeds without changing anything.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"The service does not have an active gradual rollout."},"409":{"description":"The canary deployment has not finished deploying successfully."}},"tags":["Rollout Strategies","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["promote","service","rollout"]},"v1-projects--projectId--services--serviceId--rollout-promote-post-team-scoped":{"operationId":"postProjectsServicesServiceidRolloutPromote","summary":"Promote service rollout","description":"Promotes the canary deployment of the active gradual rollout to stable, routing all traffic to it. This is idempotent: promoting an already promoted rollout succeeds without changing anything.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"404":{"description":"The service does not have an active gradual rollout."},"409":{"description":"The canary deployment has not finished deploying successfully."}},"tags":["Rollout Strategies","project"],"security":[],"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["promote","service","rollout"]},"v1-projects--projectId--services--serviceId--rollout-rollback-post":{"operationId":"postProjectsServicesServiceidRolloutRollback","summary":"Roll back service rollout","description":"Ends the active gradual rollout and redeploys the service from a previous deployment. Use the list service deployments endpoint to find the deployment to roll back to.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The deployment created by the rollback.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the new deployment created by the rollback.","example":"6560a1b2c3d4e5f6a7b8c9d0"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"string","minLength":24,"maxLength":24,"description":"Identifier of the deployment to roll back to, as returned by the list service deployments endpoint. Must be a deployment of this service.","example":"6560a1b2c3d4e5f6a7b8c9d0"}},"required":["deployment"],"additionalProperties":false,"description":"The deployment to roll back to."}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["rollback","service","rollout"]},"v1-projects--projectId--services--serviceId--rollout-rollback-post-team-scoped":{"operationId":"postProjectsServicesServiceidRolloutRollback","summary":"Roll back service rollout","description":"Ends the active gradual rollout and redeploys the service from a previous deployment. Use the list service deployments endpoint to find the deployment to roll back to.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The deployment created by the rollback.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of the new deployment created by the rollback.","example":"6560a1b2c3d4e5f6a7b8c9d0"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Rollout Strategies","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"deployment":{"type":"string","minLength":24,"maxLength":24,"description":"Identifier of the deployment to roll back to, as returned by the list service deployments endpoint. Must be a deployment of this service.","example":"6560a1b2c3d4e5f6a7b8c9d0"}},"required":["deployment"],"additionalProperties":false,"description":"The deployment to roll back to."}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["rollback","service","rollout"]},"v1-projects--projectId--services--serviceId--runtime-environment-get":{"operationId":"getProjectsServicesServiceidRuntimeEnvironment","summary":"Get service runtime environment","description":"Gets the runtime environment of the given service. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The runtime environment of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime environment variables, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","runtime-environment"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--runtime-environment-get-team-scoped":{"operationId":"getProjectsServicesServiceidRuntimeEnvironment","summary":"Get service runtime environment","description":"Gets the runtime environment of the given service. If the API key does not have the permission 'Project > Secrets > General > Read', secrets inherited from secret groups will not be displayed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}},{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query","schema":{"name":"show","type":"string","enum":["this","inherited","all"],"description":"Which secrets to display - if set to `this` only the group's secrets are displayed, if set to `inherited` only secrets from linked addons are displayed, if set to `all` or not provided, both are displayed.","example":"all","in":"query"}},{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query","schema":{"name":"replaceTemplatedValues","type":"string","enum":["true"],"description":"If templated secrets should be replaced with their inferred value rather than returned as template strings.","example":"true","in":"query"}}],"responses":{"200":{"description":"The runtime environment of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime environment variables, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain secrets saved to this entity. If the `show` parameter is set to `inherited`, this will only contain secrets inherited from linked secret groups. Otherwise, this will contain both.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"additionalProperties":false,"description":"The runtime secret files, formatted as a JSON object. If the `show` parameter is set to `this`, this will only contain files saved to this entity. If the `show` parameter is set to `inherited`, this will only contain files inherited from linked secret groups. Otherwise, this will contain both.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","runtime-environment"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--runtime-environment-post":{"operationId":"postProjectsServicesServiceidRuntimeEnvironment","summary":"Edit service runtime environment","description":"Sets the runtime environment for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated runtime environment.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"success":{"type":"boolean","description":"True if the operation was successful.","example":true},"restartSuccessful":{"type":"boolean","description":"Did the service successfully restart with the new environment variables?","example":true}},"required":["success","restartSuccessful"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the environment variables to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Services > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","runtime-environment"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--runtime-environment-post-team-scoped":{"operationId":"postProjectsServicesServiceidRuntimeEnvironment","summary":"Edit service runtime environment","description":"Sets the runtime environment for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details about the updated runtime environment.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"success":{"type":"boolean","description":"True if the operation was successful.","example":true},"restartSuccessful":{"type":"boolean","description":"Did the service successfully restart with the new environment variables?","example":true}},"required":["success","restartSuccessful"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{},"additionalProperties":{"type":"string"},"description":"An object containing the all of the environment variables to set for the service. Keys may only contain letters, numbers, hyphens, forward slashes and dots.","example":{"VARIABLE_1":"abcdef","VARIABLE_2":"12345"}},"runtimeFiles":{"type":"object","properties":{},"description":"Secret files as JSON object, encrypted at rest. File path must be absolute","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}}},"required":["runtimeEnvironment"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Secrets > Services > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","service","runtime-environment"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--runtime-environment-details-get":{"operationId":"getProjectsServicesServiceidRuntimeEnvironmentDetails","summary":"Get service runtime environment details","description":"Get details about the runtime environment accessible by the given service. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details of the runtime environment of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"runtimeFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","runtime-environment-details"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--runtime-environment-details-get-team-scoped":{"operationId":"getProjectsServicesServiceidRuntimeEnvironmentDetails","summary":"Get service runtime environment details","description":"Get details about the runtime environment accessible by the given service. Also requires the permission 'Project > Secrets > General > Read'","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"Details of the runtime environment of the service.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runtimeEnvironment":{"type":"object","properties":{"MY_VARIABLE_NAME":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"abcdef123456"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"example-addon"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"addonId":{"type":"string","description":"The ID of the addon the secret is inherited from, if applicable.","example":"addon-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the secret has been inherited from, but that are not being used as a secret with the same key exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."},"runtimeFiles":{"type":"object","properties":{"/dir/fileName":{"type":"object","properties":{"value":{"type":"object","properties":{"data":{"type":"string","description":"base64 encoded string of the file contents","example":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU="},"encoding":{"type":"string","description":"Original encoding of the file","example":"utf-8"}},"additionalProperties":false,"description":"The value of the secret.","example":{"/dir/fileName":{"data":"VGhpcyBpcyBhbiBleGFtcGxlIHdpdGggYSB0ZW1wbGF0ZWQgJHtOT0RFX0VOVn0gdmFyaWFibGU=","encoding":"utf-8"}}},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from, if applicable.","example":"example-secret"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from, if applicable.","example":10},"overriding":{"type":"array","items":{"type":"object","properties":{"value":{"description":"The value of the secret.","example":"ffffffffffff"},"inheritedFrom":{"type":"string","description":"The ID of the secret group the secret is inherited from.","example":"secret-2"},"priority":{"type":"integer","description":"The priority of the secret group the secret is inherited from.","example":0}},"required":["value","inheritedFrom","priority"],"additionalProperties":false,"description":"Data about an overridden secret."},"description":"An array containing data about other places the file has been inherited from, but that are not being used as a secret with the same file path exists with a higher priority."}},"required":["value","overriding"],"additionalProperties":false,"description":"A stored secret and details about it and its value. This can have the name of any saved secret."}},"description":"Details about all the secrets accessible by the service."}},"required":["runtimeEnvironment","runtimeFiles"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"x-nf-permission-required":"Project > Secrets > Services > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","service","runtime-environment-details"],"x-nf-deprecation-replacement":"/services/get-service","x-nf-deprecation-message":"Requests should instead use the relevant GET endpoint."},"v1-projects--projectId--services--serviceId--scale-post":{"operationId":"postProjectsServicesServiceidScale","summary":"Scale service","description":"Modifies the scaling settings for the given service.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"instances":{"type":"integer","minimum":0,"description":"The number of instances to scale the service to","example":1},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"ID of the deployment plan to switch to.","example":"nf-compute-20"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["scale","service"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--scale-post-team-scoped":{"operationId":"postProjectsServicesServiceidScale","summary":"Scale service","description":"Modifies the scaling settings for the given service.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Services","project"],"security":[],"deprecated":true,"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"instances":{"type":"integer","minimum":0,"description":"The number of instances to scale the service to","example":1},"deploymentPlan":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"ID of the deployment plan to switch to.","example":"nf-compute-20"},"storage":{"type":"object","properties":{"useHdbStorage":{"type":"boolean"},"usePdSsdStorage":{"type":"boolean"},"ephemeralStorage":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1024,"description":"Ephemeral storage per container in MB","example":1024}},"additionalProperties":false},"shmSize":{"type":"integer","minimum":64,"description":"Configures the amount of available memory-backed disk space available to /dev/shm"}},"additionalProperties":false},"gracePeriodSeconds":{"type":"integer","minimum":15,"maximum":1800,"description":"The maximum amount of time the process has to shut down after receiving a SIGTERM signal before it is forcefully shut down SIGKILL by the system."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Services > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["scale","service"],"x-nf-deprecation-replacement":"/services/patch-combined-service","x-nf-deprecation-message":"Requests should instead use the relevant PATCH endpoint."},"v1-projects--projectId--services--serviceId--snapshots-post":{"operationId":"postProjectsServicesServiceidSnapshots","summary":"Create container snapshot","description":"Schedules a snapshot of a running deployment service pod. When no pod is provided, the service must have exactly one eligible pod. Repeated requests for an active pod return the existing snapshot.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"202":{"description":"The scheduled container snapshot.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"trigger":{"type":"string","enum":["manual","containerTermination"]},"state":{"type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"]},"source":{"type":"object","properties":{"projectId":{"type":"string"},"nfObject":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["job","service","harness","addon","volume","opentofu-job","llm-model-deployment","external-addon"]}},"required":["id","type"],"additionalProperties":false}},"required":["projectId","nfObject"],"additionalProperties":false},"target":{"type":"object","properties":{"podName":{"type":"string"}},"required":["podName"],"additionalProperties":false},"compatibility":{"type":"object","properties":{"runtime":{"type":"string","enum":["kata"]},"architecture":{"type":"string","enum":["x86","arm"]},"baseImageDigest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["runtime","architecture"],"additionalProperties":false},"parentSnapshotId":{"type":"string","format":"uuid"},"inUse":{"type":"boolean"},"result":{"type":"object","properties":{"sizeBytes":{"type":"integer","minimum":0}},"required":["sizeBytes"],"additionalProperties":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},"requestedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"lastTransitionTime":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","trigger","state","source","target","compatibility","inUse","lastTransitionTime","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"No eligible pod exists, or multiple eligible pods require explicit selection."}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"podName":{"type":"string","description":"The running service pod to snapshot."},"backupDestinationId":{"type":"string","description":"The backup destination to store the snapshot in."}},"additionalProperties":false,"default":{}}}},"required":true},"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","container-snapshot"]},"v1-projects--projectId--services--serviceId--snapshots-post-team-scoped":{"operationId":"postProjectsServicesServiceidSnapshots","summary":"Create container snapshot","description":"Schedules a snapshot of a running deployment service pod. When no pod is provided, the service must have exactly one eligible pod. Repeated requests for an active pod return the existing snapshot.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path","schema":{"name":"serviceId","type":"string","required":true,"description":"ID of the service","example":"example-service","in":"path"}}],"responses":{"202":{"description":"The scheduled container snapshot.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"trigger":{"type":"string","enum":["manual","containerTermination"]},"state":{"type":"string","enum":["scheduled","accepted","running","succeeded","failed","cancelled"]},"source":{"type":"object","properties":{"projectId":{"type":"string"},"nfObject":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["job","service","harness","addon","volume","opentofu-job","llm-model-deployment","external-addon"]}},"required":["id","type"],"additionalProperties":false}},"required":["projectId","nfObject"],"additionalProperties":false},"target":{"type":"object","properties":{"podName":{"type":"string"}},"required":["podName"],"additionalProperties":false},"compatibility":{"type":"object","properties":{"runtime":{"type":"string","enum":["kata"]},"architecture":{"type":"string","enum":["x86","arm"]},"baseImageDigest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["runtime","architecture"],"additionalProperties":false},"parentSnapshotId":{"type":"string","format":"uuid"},"inUse":{"type":"boolean"},"result":{"type":"object","properties":{"sizeBytes":{"type":"integer","minimum":0}},"required":["sizeBytes"],"additionalProperties":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable"],"additionalProperties":false},"requestedAt":{"type":"string","format":"date-time"},"deadline":{"type":"string","format":"date-time"},"lastTransitionTime":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","trigger","state","source","target","compatibility","inUse","lastTransitionTime","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"No eligible pod exists, or multiple eligible pods require explicit selection."}},"tags":["Services","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"podName":{"type":"string","description":"The running service pod to snapshot."},"backupDestinationId":{"type":"string","description":"The backup destination to store the snapshot in."}},"additionalProperties":false,"default":{}}}},"required":true},"x-nf-permission-required":"Account > Platform > ContainerSnapshots > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","container-snapshot"]},"v1-projects--projectId--volumes-get":{"operationId":"getProjectsVolumes","summary":"List volumes","description":"Gets a list of volumes belonging to the project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of volumes.","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the volume","example":"example-volume"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Volume name","example":"Example Volume"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"description":"List of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}},"status":{"type":"string","description":"Status the volume is in on the cluster","example":"BOUND"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the volume was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the volume was last updated at","example":"2021-01-01 12:00:00.000Z"}},"required":["id","name","tags","spec","status","createdAt","updatedAt"],"additionalProperties":false,"description":"A volume object"},"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","volumes"]},"v1-projects--projectId--volumes-get-team-scoped":{"operationId":"getProjectsVolumes","summary":"List volumes","description":"Gets a list of volumes belonging to the project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of volumes.","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the volume","example":"example-volume"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Volume name","example":"Example Volume"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"description":"List of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}},"status":{"type":"string","description":"Status the volume is in on the cluster","example":"BOUND"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the volume was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the volume was last updated at","example":"2021-01-01 12:00:00.000Z"}},"required":["id","name","tags","spec","status","createdAt","updatedAt"],"additionalProperties":false,"description":"A volume object"},"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","volumes"]},"v1-projects--projectId--volumes-post":{"operationId":"postProjectsVolumes","summary":"Create volume","description":"Creates a volume with the specified payload","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created volume.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the volume","example":"example-volume"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Volume name","example":"Example Volume"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"description":"List of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}},"status":{"type":"string","description":"Status the volume is in on the cluster","example":"BOUND"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the volume was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the volume was last updated at","example":"2021-01-01 12:00:00.000Z"}},"required":["id","name","tags","spec","status","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a volume with the same derived identifier"}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the volume.","example":"Example Volume"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"source":{"type":"object","properties":{"type":{"type":"string","enum":["volume","backup"]},"sourceId":{"type":"string","description":"Reference to the source object. For a volume source: \"<volumeId>\". For a backup source, prefer the backup UUID. Legacy \"<volumeId>/<backupId>\" and \"<projectId>/<volumeId>/<backupId>\" references remain supported.","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["type","sourceId"],"additionalProperties":false},"owningObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to."},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to."}},"required":["id","type"],"additionalProperties":false,"description":"DEPRECATED: The object to attach this volume to."},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"maxItems":100,"uniqueItems":true,"description":"Array of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false},"description":"Backup schedules for the volume. Snapshot-only."}},"required":["name","mounts","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","volume"]},"v1-projects--projectId--volumes-post-team-scoped":{"operationId":"postProjectsVolumes","summary":"Create volume","description":"Creates a volume with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"Details about the newly created volume.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the volume","example":"example-volume"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Volume name","example":"Example Volume"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"description":"List of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}},"status":{"type":"string","description":"Status the volume is in on the cluster","example":"BOUND"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the volume was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the volume was last updated at","example":"2021-01-01 12:00:00.000Z"}},"required":["id","name","tags","spec","status","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a volume with the same derived identifier"}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the volume.","example":"Example Volume"},"stageId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"source":{"type":"object","properties":{"type":{"type":"string","enum":["volume","backup"]},"sourceId":{"type":"string","description":"Reference to the source object. For a volume source: \"<volumeId>\". For a backup source, prefer the backup UUID. Legacy \"<volumeId>/<backupId>\" and \"<projectId>/<volumeId>/<backupId>\" references remain supported.","example":"6d542e24-5d9f-4ecf-80a5-e80724b9133e"}},"required":["type","sourceId"],"additionalProperties":false},"owningObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to."},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to."}},"required":["id","type"],"additionalProperties":false,"description":"DEPRECATED: The object to attach this volume to."},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"maxItems":100,"uniqueItems":true,"description":"Array of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false},"description":"Backup schedules for the volume. Snapshot-only."}},"required":["name","mounts","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","volume"]},"v1-projects--projectId--volumes--volumeId--get":{"operationId":"getProjectsVolumesVolumeid","summary":"Get volume","description":"Retrieve a volume","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"Details about the specified Volume.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the volume","example":"example-volume"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Volume name","example":"Example Volume"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"description":"List of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}},"status":{"type":"string","description":"Status the volume is in on the cluster","example":"BOUND"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the volume was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the volume was last updated at","example":"2021-01-01 12:00:00.000Z"}},"required":["id","name","tags","spec","status","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume"]},"v1-projects--projectId--volumes--volumeId--get-team-scoped":{"operationId":"getProjectsVolumesVolumeid","summary":"Get volume","description":"Retrieve a volume","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"Details about the specified Volume.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the volume","example":"example-volume"},"uid":{"type":"string","minLength":24,"maxLength":24,"description":"Permanent identifier for the resource. Unlike `id`, it never changes and is never reused.","example":"68f0aa1b9c4e2d7f11a3b402"},"name":{"type":"string","description":"Volume name","example":"Example Volume"},"tags":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"spec":{"type":"object","properties":{"accessMode":{"type":"string","enum":["ReadWriteOnce","ReadWriteMany"],"description":"Access mode of the volume. Only `ReadWriteOnce` is generally available."},"storageClassName":{"type":"string","description":"The type of the storage.","example":"nvme"},"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"required":["accessMode","storageSize"],"additionalProperties":false,"description":"Example storage schema"},"attachedObjects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."},"description":"List of objects this volume is attached to."},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}},"status":{"type":"string","description":"Status the volume is in on the cluster","example":"BOUND"},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the volume was created at","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the volume was last updated at","example":"2021-01-01 12:00:00.000Z"}},"required":["id","name","tags","spec","status","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume"]},"v1-projects--projectId--volumes--volumeId--post":{"operationId":"postProjectsVolumesVolumeid","summary":"Update volume","description":"Update volume mounts and storage size","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","volume"]},"v1-projects--projectId--volumes--volumeId--post-team-scoped":{"operationId":"postProjectsVolumesVolumeid","summary":"Update volume","description":"Update volume mounts and storage size","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"mounts":{"type":"array","items":{"type":"object","properties":{"volumeMountPath":{"type":"string","pattern":"^((?!\\.\\.).)*$","description":"Optionally specify the path inside this volume that should be mounted","example":""},"containerMountPath":{"type":"string","pattern":"^((?!:).)*$","not":{"enum":["/"]},"description":"Specify the path into which the volume should be mounted","example":"/container"}},"required":["containerMountPath"],"additionalProperties":false},"uniqueItems":true,"description":"Array of mounts, containerMountPaths must be unique"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1,"description":"The size of the storage, in megabytes. Configurable sizes depend on the storage class.","example":6144}},"additionalProperties":false},"backupSchedules":{"type":"array","items":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","volume"]},"v1-projects--projectId--volumes--volumeId--delete":{"operationId":"deleteProjectsVolumesVolumeid","summary":"Delete volume","description":"Deletes this volume and its associated data.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","volume"]},"v1-projects--projectId--volumes--volumeId--delete-team-scoped":{"operationId":"deleteProjectsVolumesVolumeid","summary":"Delete volume","description":"Deletes this volume and its associated data.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","volume"]},"v1-projects--projectId--volumes--volumeId--attach-post":{"operationId":"postProjectsVolumesVolumeidAttach","summary":"Attach volume","description":"Attach a volume","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"owningObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to."},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to."}},"required":["id","type"],"additionalProperties":false,"description":"DEPRECATED: The object to attach this volume to."},"nfObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["attach","volume"]},"v1-projects--projectId--volumes--volumeId--attach-post-team-scoped":{"operationId":"postProjectsVolumesVolumeidAttach","summary":"Attach volume","description":"Attach a volume","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"owningObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to."},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to."}},"required":["id","type"],"additionalProperties":false,"description":"DEPRECATED: The object to attach this volume to."},"nfObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to attach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to attach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to attach this volume to."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["attach","volume"]},"v1-projects--projectId--volumes--volumeId--backup-schedules-get":{"operationId":"getProjectsVolumesVolumeidBackupSchedules","summary":"Get volume backup schedules","description":"Gets details about a volume's backup schedules","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the volume's backup schedules.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"schedules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of backup being performed.","example":"snapshot"},"backupCompressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom backup destination in which the dump back up should be stored.","example":"example-backup-destination"},"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Information about the scheduling for the backup schedule."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was created.","example":"2022-07-11T13:08:09.626Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was last updated.","example":"2022-07-11T13:08:09.626Z"}},"required":["id","backupType","scheduling","retentionTime","createdAt","updatedAt"],"additionalProperties":false}}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume","backup-schedules"]},"v1-projects--projectId--volumes--volumeId--backup-schedules-get-team-scoped":{"operationId":"getProjectsVolumesVolumeidBackupSchedules","summary":"Get volume backup schedules","description":"Gets details about a volume's backup schedules","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the volume's backup schedules.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"schedules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"},"backupType":{"type":"string","enum":["dump","snapshot"],"description":"The type of backup being performed.","example":"snapshot"},"backupCompressionType":{"type":"string","enum":["gz","zstd"],"description":"The compression algorithm of the backup. Only applicable for dump backups. Defaults to `gz`.","example":"gz"},"additionalDestinations":{"type":"array","items":{"type":"object","properties":{"destinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Additional custom back up destination that should be used to store the snapshot.","example":"example-backup-destination"},"retentionTime":{"type":"integer","minimum":1,"description":"Retention time of the additional back up in days.","examples":[7,7]},"type":{"type":"string","enum":["custom"],"description":"The type of backup destination to use","example":"custom"}},"required":["destinationId","type"],"additionalProperties":false},"description":"List of destinations for which a backup should be created of this backup. Only applicable for snapshot backups."},"customDestinationId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Custom backup destination in which the dump back up should be stored.","example":"example-backup-destination"},"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Information about the scheduling for the backup schedule."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7},"createdAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was created.","example":"2022-07-11T13:08:09.626Z"},"updatedAt":{"type":"string","format":"date-time","description":"The timestamp the backup schedule was last updated.","example":"2022-07-11T13:08:09.626Z"}},"required":["id","backupType","scheduling","retentionTime","createdAt","updatedAt"],"additionalProperties":false}}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume","backup-schedules"]},"v1-projects--projectId--volumes--volumeId--backup-schedules-post":{"operationId":"postProjectsVolumesVolumeidBackupSchedules","summary":"Create volume backup schedule","description":"Create a new snapshot backup schedule for a volume.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"Details about the created backup schedule.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > Backups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","volume","backup-schedule"]},"v1-projects--projectId--volumes--volumeId--backup-schedules-post-team-scoped":{"operationId":"postProjectsVolumesVolumeidBackupSchedules","summary":"Create volume backup schedule","description":"Create a new snapshot backup schedule for a volume.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"Details about the created backup schedule.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"ID of the schedule.","example":"62cc20b90956ab62a58e8474"}},"required":["id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"scheduling":{"type":"object","properties":{"interval":{"type":"string","enum":["hourly","daily","weekly"],"description":"The interval between backups. Each addon can only have one backup schedule of each interval for each backup type.","example":"weekly"},"minute":{"type":"array","items":{"type":"integer","minimum":0,"maximum":59,"description":"A minute when the backup should be performed.","example":30},"uniqueItems":true,"description":"An array of minutes when the backup should be performed."},"hour":{"type":"array","items":{"type":"integer","minimum":0,"maximum":23,"description":"An hour when the backup should be performed, in 24 hour format.","example":18},"uniqueItems":true,"description":"An array of hours in 24 hour format when the backup should be performed. At these hours, a backup will be performed at each of the minutes provided in the `minute` field. Required for `daily` and `weekly` intervals and unavailable for `hourly` intervals."},"day":{"type":"array","items":{"type":"integer","minimum":0,"maximum":6,"description":"A day of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday.","example":4},"uniqueItems":true,"description":"An array of days of the week when the backup should be performed, where `0` represents Monday and `6` represents Sunday. On these days, a backup will be performed at each of the minutes provided in the `minute` field whenever it is an hour from the `hour` field. Required for `weekly` intervals and unavailable for `hourly` and `daily` intervals."}},"required":["interval","minute"],"additionalProperties":false,"description":"Schedule for the backup."},"retentionTime":{"type":"integer","minimum":1,"description":"The time the backup is retained for, in days.","example":7}},"required":["scheduling","retentionTime"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > Backups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","volume","backup-schedule"]},"v1-projects--projectId--volumes--volumeId--backup-schedules--scheduleId--delete":{"operationId":"deleteProjectsVolumesVolumeidBackupSchedulesScheduleid","summary":"Delete volume backup schedule","description":"Deletes a snapshot backup schedule for a volume.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path","schema":{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","volume","backup-schedule"]},"v1-projects--projectId--volumes--volumeId--backup-schedules--scheduleId--delete-team-scoped":{"operationId":"deleteProjectsVolumesVolumeidBackupSchedulesScheduleid","summary":"Delete volume backup schedule","description":"Deletes a snapshot backup schedule for a volume.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path","schema":{"name":"scheduleId","type":"string","required":true,"description":"ID of the backup schedule","example":"62d5729ab8593e3e33b65105","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","volume","backup-schedule"]},"v1-projects--projectId--volumes--volumeId--backups-get":{"operationId":"getProjectsVolumesVolumeidBackups","summary":"Get volume backups","description":"Get list of backups associated with a volume","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of volume backups.","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the backup","example":"example-backup"},"uid":{"type":"string","format":"uuid","description":"Stable identifier for using this backup as a volume source"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1}},"additionalProperties":false},"source":{"type":"object","properties":{"type":{"type":"string"},"sourceObject":{"type":"object","properties":{"id":{"type":"string"},"spec":{"type":"object","properties":{"accessMode":{"type":"string"},"storageSize":{"type":"integer","minimum":1},"storageClassName":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","name","status"],"additionalProperties":false},"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume","backups"]},"v1-projects--projectId--volumes--volumeId--backups-get-team-scoped":{"operationId":"getProjectsVolumesVolumeidBackups","summary":"Get volume backups","description":"Get list of backups associated with a volume","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of volume backups.","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the backup","example":"example-backup"},"uid":{"type":"string","format":"uuid","description":"Stable identifier for using this backup as a volume source"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1}},"additionalProperties":false},"source":{"type":"object","properties":{"type":{"type":"string"},"sourceObject":{"type":"object","properties":{"id":{"type":"string"},"spec":{"type":"object","properties":{"accessMode":{"type":"string"},"storageSize":{"type":"integer","minimum":1},"storageClassName":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","name","status"],"additionalProperties":false},"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume","backups"]},"v1-projects--projectId--volumes--volumeId--backups-post":{"operationId":"postProjectsVolumesVolumeidBackups","summary":"Backup volume","description":"Initiates a backup for a given volume","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"Details about the created volume backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the backup","example":"example-backup"},"uid":{"type":"string","format":"uuid","description":"Stable identifier for using this backup as a volume source"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1}},"additionalProperties":false},"source":{"type":"object","properties":{"type":{"type":"string"},"sourceObject":{"type":"object","properties":{"id":{"type":"string"},"spec":{"type":"object","properties":{"accessMode":{"type":"string"},"storageSize":{"type":"integer","minimum":1},"storageClassName":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","name","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the backup.","example":"Example Backup"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description for the backup.","example":"Example backup description"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > Backups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["backup","volume"]},"v1-projects--projectId--volumes--volumeId--backups-post-team-scoped":{"operationId":"postProjectsVolumesVolumeidBackups","summary":"Backup volume","description":"Initiates a backup for a given volume","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"Details about the created volume backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the backup","example":"example-backup"},"uid":{"type":"string","format":"uuid","description":"Stable identifier for using this backup as a volume source"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1}},"additionalProperties":false},"source":{"type":"object","properties":{"type":{"type":"string"},"sourceObject":{"type":"object","properties":{"id":{"type":"string"},"spec":{"type":"object","properties":{"accessMode":{"type":"string"},"storageSize":{"type":"integer","minimum":1},"storageClassName":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","name","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The name of the backup.","example":"Example Backup"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The description for the backup.","example":"Example backup description"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > Backups > Create","x-nf-team-scoped":true,"x-nf-cli-command":["backup","volume"]},"v1-projects--projectId--volumes--volumeId--backups--backupId--get":{"operationId":"getProjectsVolumesVolumeidBackupsBackupid","summary":"Get volume backup details","description":"Get details for a specific volume backup","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"Details about the specified volume backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the backup","example":"example-backup"},"uid":{"type":"string","format":"uuid","description":"Stable identifier for using this backup as a volume source"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1}},"additionalProperties":false},"source":{"type":"object","properties":{"type":{"type":"string"},"sourceObject":{"type":"object","properties":{"id":{"type":"string"},"spec":{"type":"object","properties":{"accessMode":{"type":"string"},"storageSize":{"type":"integer","minimum":1},"storageClassName":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","name","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume","backup"]},"v1-projects--projectId--volumes--volumeId--backups--backupId--get-team-scoped":{"operationId":"getProjectsVolumesVolumeidBackupsBackupid","summary":"Get volume backup details","description":"Get details for a specific volume backup","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"Details about the specified volume backup.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the backup","example":"example-backup"},"uid":{"type":"string","format":"uuid","description":"Stable identifier for using this backup as a volume source"},"name":{"type":"string"},"description":{"type":"string"},"status":{"type":"string"},"spec":{"type":"object","properties":{"storageSize":{"type":"integer","minimum":1}},"additionalProperties":false},"source":{"type":"object","properties":{"type":{"type":"string"},"sourceObject":{"type":"object","properties":{"id":{"type":"string"},"spec":{"type":"object","properties":{"accessMode":{"type":"string"},"storageSize":{"type":"integer","minimum":1},"storageClassName":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["id","name","status"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","volume","backup"]},"v1-projects--projectId--volumes--volumeId--backups--backupId--delete":{"operationId":"deleteProjectsVolumesVolumeidBackupsBackupid","summary":"Delete volume backup","description":"Delete the volume backup","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","volume","backup"]},"v1-projects--projectId--volumes--volumeId--backups--backupId--delete-team-scoped":{"operationId":"deleteProjectsVolumesVolumeidBackupsBackupid","summary":"Delete volume backup","description":"Delete the volume backup","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}},{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path","schema":{"name":"backupId","type":"string","required":true,"description":"ID of the backup","example":"example-backup","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"x-nf-permission-required":"Project > Volumes > Backups > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","volume","backup"]},"v1-projects--projectId--volumes--volumeId--detach-post":{"operationId":"postProjectsVolumesVolumeidDetach","summary":"Detach volume","description":"Detach a volume","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"nfObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to detach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to detach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to detach this volume to."}},"required":["nfObject"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["detach","volume"]},"v1-projects--projectId--volumes--volumeId--detach-post-team-scoped":{"operationId":"postProjectsVolumesVolumeidDetach","summary":"Detach volume","description":"Detach a volume","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path","schema":{"name":"volumeId","type":"string","required":true,"description":"ID of the volume","example":"example-volume","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Volumes","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"nfObject":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"The id of object to detach this volume to.","example":"example-service"},"type":{"type":"string","enum":["service","job"],"description":"The type of the object to detach this volume to.","example":"service"}},"required":["id","type"],"additionalProperties":false,"description":"The object to detach this volume to."}},"required":["nfObject"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Volumes > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["detach","volume"]},"v1-projects--projectId--workflows-get":{"operationId":"getProjectsWorkflows","summary":"List workflows","description":"Lists all workflows for a project","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of workflows that belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pipelines":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the workflow","example":"example-workflow"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","id"],"additionalProperties":false,"description":"A workflow."},"description":"An array of workflows in this project."}},"required":["pipelines"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","workflows"]},"v1-projects--projectId--workflows-get-team-scoped":{"operationId":"getProjectsWorkflows","summary":"List workflows","description":"Lists all workflows for a project","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of workflows that belong to the project.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"pipelines":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the workflow","example":"example-workflow"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","id"],"additionalProperties":false,"description":"A workflow."},"description":"An array of workflows in this project."}},"required":["pipelines"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","workflows"]},"v1-projects--projectId--workflows-post":{"operationId":"postProjectsWorkflows","summary":"Create workflow","description":"Create a workflow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Workflows","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the workflow."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the workflow is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this workflow to be run from other projects."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can run this workflow. If false, all projects except the listed ones can run this workflow."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can run this workflow."},"stageId":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true,"description":"ID of the stage"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to iD of the stage"}],"description":"ID of the stage"},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Workflows > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","workflow"]},"v1-projects--projectId--workflows-post-team-scoped":{"operationId":"postProjectsWorkflows","summary":"Create workflow","description":"Create a workflow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Workflows","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the workflow."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the workflow is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this workflow to be run from other projects."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can run this workflow. If false, all projects except the listed ones can run this workflow."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can run this workflow."},"stageId":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true,"description":"ID of the stage"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to iD of the stage"}],"description":"ID of the stage"},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Workflows > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","workflow"]},"v1-projects--projectId--workflows--workflowId--get":{"operationId":"getProjectsWorkflowsWorkflowid","summary":"Get workflow","description":"Gets details about a workflow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a workflow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeSchema"},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the workflow."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the workflow is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this workflow to be run from other projects."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can run this workflow. If false, all projects except the listed ones can run this workflow."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can run this workflow."},"stageId":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true,"description":"ID of the stage"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to iD of the stage"}],"description":"ID of the stage"},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"paused":{"type":"boolean","description":"Whether triggers are paused for this workflow. If `true`, Git triggers and webhook triggers will not run the workflow.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the template was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the template was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","name","status","paused","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","workflow"]},"v1-projects--projectId--workflows--workflowId--get-team-scoped":{"operationId":"getProjectsWorkflowsWorkflowid","summary":"Get workflow","description":"Gets details about a workflow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a workflow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeSchema"},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the workflow."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the workflow is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this workflow to be run from other projects."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can run this workflow. If false, all projects except the listed ones can run this workflow."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can run this workflow."},"stageId":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true,"description":"ID of the stage"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to iD of the stage"}],"description":"ID of the stage"},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"paused":{"type":"boolean","description":"Whether triggers are paused for this workflow. If `true`, Git triggers and webhook triggers will not run the workflow.","example":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the template was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the template was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","name","status","paused","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","workflow"]},"v1-projects--projectId--workflows--workflowId--post":{"operationId":"postProjectsWorkflowsWorkflowid","summary":"Update workflow","description":"Updates a workflow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Workflows","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the workflow."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the workflow is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this workflow to be run from other projects."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can run this workflow. If false, all projects except the listed ones can run this workflow."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can run this workflow."},"stageId":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true,"description":"ID of the stage"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to iD of the stage"}],"description":"ID of the stage"},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Workflows > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","workflow"]},"v1-projects--projectId--workflows--workflowId--post-team-scoped":{"operationId":"postProjectsWorkflowsWorkflowid","summary":"Update workflow","description":"Updates a workflow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Workflows","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"richInputs":{"type":"array","items":{"$ref":"#/components/schemas/V1ReleaseFlowRichInputSchema"},"description":"An array of rich UI override inputs for the workflow."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"teardownSpec":{"type":"object","properties":{"spec":{"description":"The root node of the teardown workflow."},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the workflow is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"crossProjectAccess":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Allow this workflow to be run from other projects."},"projects":{"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9-]+$","example":"example-project"},"description":"A list of project IDs used as an allow list or deny list."},"isAllowList":{"type":"boolean","description":"If true, only the listed projects can run this workflow. If false, all projects except the listed ones can run this workflow."}},"required":["enabled","projects","isAllowList"],"additionalProperties":false,"description":"Controls which projects can run this workflow."},"stageId":{"oneOf":[{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"nullable":true,"description":"ID of the stage"},{"type":"string","pattern":".*\\${.*}.*","description":"A string containing one or more references that resolve to iD of the stage"}],"description":"ID of the stage"},"triggers":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-push"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["webhook"]},"spec":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec","ref"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-release"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-pr-label"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"labelNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"branchNamePatterns":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"names":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]}},"additionalProperties":false},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vcs-check-suite"]},"spec":{"type":"object","properties":{"vcs":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"}},"required":["vcsService","repoUrl"]},"branchNamePatterns":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"commitMessageFlags":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"flags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]}},"additionalProperties":false},"filePaths":{"type":"object","properties":{"enabled":{"type":"boolean","default":false},"allowList":{"type":"boolean","default":false},"paths":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["cron"]},"spec":{"type":"object","properties":{"cron":{"type":"string","description":"A cron expression that defines the schedule on which the template will be executed.","example":"0 * * * *"}},"required":["cron"],"additionalProperties":false},"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"id":{"type":"string"},"paused":{"type":"boolean"}},"required":["kind","spec"],"additionalProperties":false}]},"uniqueItems":true,"default":[]},"apiVersion":{"type":"string"},"project":{"type":"object","properties":{}},"spec":{"type":"object","properties":{}}},"required":["name","apiVersion","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Workflows > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","workflow"]},"v1-projects--projectId--workflows--workflowId--runs-post":{"operationId":"postProjectsWorkflowsWorkflowidRuns","summary":"Run workflow","description":"Runs a given workflow with given arguments. This endpoint can be used as part of a CI pipeline to automatically trigger a release process.","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Workflows","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The optional name of the workflow run.","example":"Example Run"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The optional description of the workflow run.","example":"This is a description for the workflow run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'.","example":{"ARG_1":"value"}},"overrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for specific reference values. This should be an object where each key corresponds to a ref defined in the template. The values of each of these keys should also be an object, where each key value pair provided will overwrite the value for that key in the given ref. For example, the value `{ 'example-ref': { 'branch': 'devel' } }` would set the `branch` field to `devel` for the node with ref `example-ref`.","example":{"example-ref":{"branch":"devel"}}},"releaseNodeOverrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for release nodes. This should be an object where each key is the id of a deployment service used in a release node. The value of each of these keys should be also be an object containing the new spec of the release for that deployment service.","example":{"example-service":{"type":"registry","origin":{"imagePath":"nginx:latest"}}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Workflows > Runs > Start","x-nf-team-scoped":true,"x-nf-cli-command":["run","workflow"]},"v1-projects--projectId--workflows--workflowId--runs-post-team-scoped":{"operationId":"postProjectsWorkflowsWorkflowidRuns","summary":"Run workflow","description":"Runs a given workflow with given arguments. This endpoint can be used as part of a CI pipeline to automatically trigger a release process.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}}],"responses":{"200":{"description":"success"}},"tags":["Workflows","project"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z]((-|\\s)?[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"The optional name of the workflow run.","example":"Example Run"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"The optional description of the workflow run.","example":"This is a description for the workflow run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'.","example":{"ARG_1":"value"}},"overrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for specific reference values. This should be an object where each key corresponds to a ref defined in the template. The values of each of these keys should also be an object, where each key value pair provided will overwrite the value for that key in the given ref. For example, the value `{ 'example-ref': { 'branch': 'devel' } }` would set the `branch` field to `devel` for the node with ref `example-ref`.","example":{"example-ref":{"branch":"devel"}}},"releaseNodeOverrides":{"type":"object","properties":{},"additionalProperties":false,"description":"Overrides for release nodes. This should be an object where each key is the id of a deployment service used in a release node. The value of each of these keys should be also be an object containing the new spec of the release for that deployment service.","example":{"example-service":{"type":"registry","origin":{"imagePath":"nginx:latest"}}}}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Project > Workflows > Runs > Start","x-nf-team-scoped":true,"x-nf-cli-command":["run","workflow"]},"v1-projects--projectId--workflows--workflowId--runs-get":{"operationId":"getProjectsWorkflowsWorkflowidRuns","summary":"List workflow runs","description":"Lists runs of a workflow","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this workflow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the workflow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the workflow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the workflow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["id","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"A workflow run"}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","workflow-runs"]},"v1-projects--projectId--workflows--workflowId--runs-get-team-scoped":{"operationId":"getProjectsWorkflowsWorkflowidRuns","summary":"List workflow runs","description":"Lists runs of a workflow","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of runs for this workflow.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the workflow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the workflow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the workflow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["id","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"A workflow run"}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","workflow-runs"]},"v1-projects--projectId--workflows--workflowId--runs--runId--get":{"operationId":"getProjectsWorkflowsWorkflowidRunsRunid","summary":"Get workflow run details","description":"Get information about the given workflow run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a workflow run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the workflow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the workflow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the workflow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","workflow-run"]},"v1-projects--projectId--workflows--workflowId--runs--runId--get-team-scoped":{"operationId":"getProjectsWorkflowsWorkflowidRunsRunid","summary":"Get workflow run details","description":"Get information about the given workflow run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about a workflow run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the workflow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the workflow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the workflow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > Runs > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","workflow-run"]},"v1-projects--projectId--workflows--workflowId--runs--runId--abort-post":{"operationId":"postProjectsWorkflowsWorkflowidRunsRunidAbort","summary":"Abort workflow run","description":"Abort the given workflow run","parameters":[{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the aborting run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the workflow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the workflow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the workflow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > Runs > Abort","x-nf-team-scoped":true,"x-nf-cli-command":["abort","workflow-run"]},"v1-projects--projectId--workflows--workflowId--runs--runId--abort-post-team-scoped":{"operationId":"postProjectsWorkflowsWorkflowidRunsRunidAbort","summary":"Abort workflow run","description":"Abort the given workflow run","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path","schema":{"name":"projectId","type":"string","required":true,"description":"ID of the project","example":"default-project","in":"path"}},{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path","schema":{"name":"workflowId","type":"string","required":true,"description":"ID of the workflow","example":"development","in":"path"}},{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path","schema":{"name":"runId","type":"string","required":true,"description":"ID of the workflow run","example":"development","in":"path"}}],"responses":{"200":{"description":"Details about the aborting run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"triggers":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","description":"A reference that can be used to access the output of this trigger in the template."},"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If vcsService is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string"},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo that will trigger the template.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branchRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"prRestrictions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z/*0-9%\\-.#_!'();,&=+]*$"},"default":[]},"pathIgnoreRules":{"type":"array","items":{"type":"string","maxLength":260,"description":"A path ignore rule, following `.gitignore` syntax. For example, `*.md` will ignore all files ending with `.md`.","example":"README.md"},"maxItems":200,"description":"An array of path ignore rules. A commit will only be built if a file has been changed that does not match any of the ignore rules. Path ignore rules follow `.gitignore` syntax.","default":[]},"ciIgnoreFlags":{"type":"array","items":{"type":"string","maxLength":72,"description":"A commit ignore flag.","example":"[skip ci]"},"maxItems":200,"description":"An array of commit ignore flags. If a commit message contains one or more of these flags, that commit will not be built. Defaults to `[\"[skip ci]\", \"[ci skip]\", \"[no ci]\", \"[skip nf]\", \"[nf skip]\", \"[northflank skip]\", \"[skip northflank]\"]`","example":["[skip ci]","[ci skip]","[no ci]","[skip nf]","[nf skip]","[northflank skip]","[skip northflank]"],"default":[]},"ciIgnoreFlagsEnabled":{"type":"boolean","default":false},"isAllowList":{"type":"boolean","default":false},"ignoreDrafts":{"type":"boolean","description":"If `true`, draft pull requests from this repo will not trigger the template.","default":false}},"required":["vcsService","repoUrl"],"additionalProperties":false},"default":[]},"options":{"type":"object","properties":{"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"paused":{"type":"boolean","description":"If `true`, the template will not run when triggered by git.","example":false}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1ReleaseFlowTemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"ID of the workflow run","example":"110ddb52-bdcd-482d-8ac2-05ba580afe2f"},"name":{"type":"string","description":"Optional name for the workflow run","example":"Example run"},"description":{"type":"string","description":"Optional description for the workflow run","example":"This is an example description"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["apiVersion","spec","id","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Workflows","project"],"security":[],"x-nf-permission-required":"Project > Workflows > Runs > Abort","x-nf-team-scoped":true,"x-nf-cli-command":["abort","workflow-run"]},"v1-secrets-get":{"operationId":"getSecrets","summary":"List global secrets","description":"Gets a list of global secrets","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of secrets.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the global secret","example":"example-secret"},"name":{"type":"string","description":"Global secret name","example":"Example Secret"},"description":{"type":"string","description":"A short description of the global secret","example":"This is the global secret description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"createdAt":{"type":"string","format":"date-time","description":"The time the global secret was created.","example":"2020-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the global secret was last updated.","example":"2020-01-01T12:00:00.000Z"}},"required":["id","name","type","createdAt","updatedAt"],"additionalProperties":false,"description":"A global secret object"},"description":"An array of global secrets"}},"required":["secrets"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets"],"security":[],"x-nf-permission-required":"Account > GlobalSecrets > Secrets > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","global-secrets"]},"v1-secrets-get-team-scoped":{"operationId":"getSecrets","summary":"List global secrets","description":"Gets a list of global secrets","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"The list of secrets.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"secrets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the global secret","example":"example-secret"},"name":{"type":"string","description":"Global secret name","example":"Example Secret"},"description":{"type":"string","description":"A short description of the global secret","example":"This is the global secret description"},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"createdAt":{"type":"string","format":"date-time","description":"The time the global secret was created.","example":"2020-01-01T12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"The time the global secret was last updated.","example":"2020-01-01T12:00:00.000Z"}},"required":["id","name","type","createdAt","updatedAt"],"additionalProperties":false,"description":"A global secret object"},"description":"An array of global secrets"}},"required":["secrets"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","team"],"security":[],"x-nf-permission-required":"Account > GlobalSecrets > Secrets > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","global-secrets"]},"v1-secrets-post":{"operationId":"postSecrets","summary":"Create global secret","description":"Creates a global secret with the specified payload","parameters":[],"responses":{"200":{"description":"Details about the newly created secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a secret with the same derived identifier"}},"tags":["Secrets"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","type"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > GlobalSecrets > Secrets > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","global-secret"]},"v1-secrets-post-team-scoped":{"operationId":"postSecrets","summary":"Create global secret","description":"Creates a global secret with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the newly created secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}},"409":{"description":"There is already a secret with the same derived identifier"}},"tags":["Secrets","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","type"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > GlobalSecrets > Secrets > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","global-secret"]},"v1-secrets-put":{"operationId":"putSecrets","summary":"Put global secret","description":"Creates or updates a global secret with the specified payload","parameters":[{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query","schema":{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query"}},{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query","schema":{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query"}}],"responses":{"200":{"description":"Details about the created or updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"triggerResult":{"type":"object","properties":{"batchId":{"type":"string","maxLength":128},"accepted":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0},"deduplicated":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"templateInternalId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"status":{"type":"string","enum":["succeeded","failed","skipped","deduplicated"]},"templateRunId":{"type":"string"}},"required":["templateInternalId","status"],"additionalProperties":false}}},"required":["batchId","accepted","succeeded","failed","skipped","deduplicated","items"],"additionalProperties":false}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","type"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > GlobalSecrets > Secrets > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","global-secret"]},"v1-secrets-put-team-scoped":{"operationId":"putSecrets","summary":"Put global secret","description":"Creates or updates a global secret with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query","schema":{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query"}},{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query","schema":{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query"}}],"responses":{"200":{"description":"Details about the created or updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"triggerResult":{"type":"object","properties":{"batchId":{"type":"string","maxLength":128},"accepted":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0},"deduplicated":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"templateInternalId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"status":{"type":"string","enum":["succeeded","failed","skipped","deduplicated"]},"templateRunId":{"type":"string"}},"required":["templateInternalId","status"],"additionalProperties":false}}},"required":["batchId","accepted","succeeded","failed","skipped","deduplicated","items"],"additionalProperties":false}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false}},"required":["name","type"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > GlobalSecrets > Secrets > Create","x-nf-team-scoped":true,"x-nf-cli-command":["put","global-secret"]},"v1-secrets--secretId--patch":{"operationId":"patchSecretsSecretid","summary":"Patch global secret","description":"Updates a global secret with the specified payload","parameters":[{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}},{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query","schema":{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query"}},{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query","schema":{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query"}}],"responses":{"200":{"description":"Details about the updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"triggerResult":{"type":"object","properties":{"batchId":{"type":"string","maxLength":128},"accepted":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0},"deduplicated":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"templateInternalId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"status":{"type":"string","enum":["succeeded","failed","skipped","deduplicated"]},"templateRunId":{"type":"string"}},"required":["templateInternalId","status"],"additionalProperties":false}}},"required":["batchId","accepted","succeeded","failed","skipped","deduplicated","items"],"additionalProperties":false}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["patch","global-secret"]},"v1-secrets--secretId--patch-team-scoped":{"operationId":"patchSecretsSecretid","summary":"Patch global secret","description":"Updates a global secret with the specified payload","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}},{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query","schema":{"name":"runDependents","type":"boolean","description":"On update, whether to run the global secret’s configured dependent templates (when enabled). Defaults to false.","example":true,"in":"query"}},{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query","schema":{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same update is retried.","in":"query"}}],"responses":{"200":{"description":"Details about the updated secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"triggerResult":{"type":"object","properties":{"batchId":{"type":"string","maxLength":128},"accepted":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0},"deduplicated":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"templateInternalId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"status":{"type":"string","enum":["succeeded","failed","skipped","deduplicated"]},"templateRunId":{"type":"string"}},"required":["templateInternalId","status"],"additionalProperties":false}}},"required":["batchId","accepted","succeeded","failed","skipped","deduplicated","items"],"additionalProperties":false}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"additionalProperties":false},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["patch","global-secret"]},"v1-secrets--secretId--get":{"operationId":"getSecretsSecretid","summary":"Get global secret","description":"Get a global secret including its contents","parameters":[{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"Details about the given secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","global-secret"]},"v1-secrets--secretId--get-team-scoped":{"operationId":"getSecretsSecretid","summary":"Get global secret","description":"Get a global secret including its contents","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"Details about the given secret.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"secrets":{"type":"object","properties":{"values":{"type":"object","properties":{}},"files":{"type":"object","properties":{},"additionalProperties":false}},"required":["values"],"additionalProperties":false},"type":{"type":"string","enum":["secret","config"],"description":"The permission type of the global secret.","example":"secret"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"dependents":{"type":"object","properties":{"templates":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"maxItems":20,"uniqueItems":true,"description":"Templates to run, referenced by internalId.","default":[]}},"additionalProperties":false}},"additionalProperties":false},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","type","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","team"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["get","global-secret"]},"v1-secrets--secretId--delete":{"operationId":"deleteSecretsSecretid","summary":"Delete global secret","description":"Delete a global secret","parameters":[{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["delete","global-secret"]},"v1-secrets--secretId--delete-team-scoped":{"operationId":"deleteSecretsSecretid","summary":"Delete global secret","description":"Delete a global secret","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","team"],"security":[],"x-nf-dynamic-permission":true,"x-nf-team-scoped":true,"x-nf-cli-command":["delete","global-secret"]},"v1-secrets--secretId--trigger-dependents-post":{"operationId":"postSecretsSecretidTriggerDependents","summary":"Trigger global secret dependents","description":"Runs the templates configured under the global secret’s dependents (when enabled).","parameters":[{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}},{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same request is retried.","in":"query","schema":{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same request is retried.","in":"query"}}],"responses":{"200":{"description":"The result of triggering the configured dependent templates.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"batchId":{"type":"string","maxLength":128},"accepted":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0},"deduplicated":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"templateInternalId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"status":{"type":"string","enum":["succeeded","failed","skipped","deduplicated"]},"templateRunId":{"type":"string"}},"required":["templateInternalId","status"],"additionalProperties":false}}},"required":["batchId","accepted","succeeded","failed","skipped","deduplicated","items"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets"],"security":[],"x-nf-permission-required":"Account > Templates > General > Run","x-nf-team-scoped":true,"x-nf-cli-command":["trigger","global-secret","dependents"]},"v1-secrets--secretId--trigger-dependents-post-team-scoped":{"operationId":"postSecretsSecretidTriggerDependents","summary":"Trigger global secret dependents","description":"Runs the templates configured under the global secret’s dependents (when enabled).","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path","schema":{"name":"secretId","type":"string","required":true,"description":"ID of the secret","example":"example-secret","in":"path"}},{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same request is retried.","in":"query","schema":{"name":"idempotencyKey","type":"string","maxLength":128,"description":"Deduplicates dependent template runs when the same request is retried.","in":"query"}}],"responses":{"200":{"description":"The result of triggering the configured dependent templates.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"batchId":{"type":"string","maxLength":128},"accepted":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"skipped":{"type":"integer","minimum":0},"deduplicated":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"templateInternalId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"status":{"type":"string","enum":["succeeded","failed","skipped","deduplicated"]},"templateRunId":{"type":"string"}},"required":["templateInternalId","status"],"additionalProperties":false}}},"required":["batchId","accepted","succeeded","failed","skipped","deduplicated","items"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Secrets","team"],"security":[],"x-nf-permission-required":"Account > Templates > General > Run","x-nf-team-scoped":true,"x-nf-cli-command":["trigger","global-secret","dependents"]},"v1-tags-get":{"operationId":"getTags","summary":"List tags","description":"List the resource tags for this entity.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of tags for this entity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"example-tag"},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"}},"required":["name","id"],"additionalProperties":false},"description":"A list of available resource tags."}},"required":["tags"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags"],"security":[],"x-nf-permission-required":"Account > Platform > Tags > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","tags"]},"v1-tags-get-team-scoped":{"operationId":"getTags","summary":"List tags","description":"List the resource tags for this entity.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of tags for this entity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"example-tag"},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"}},"required":["name","id"],"additionalProperties":false},"description":"A list of available resource tags."}},"required":["tags"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags","team"],"security":[],"x-nf-permission-required":"Account > Platform > Tags > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","tags"]},"v1-tags-post":{"operationId":"postTags","summary":"Add tag","description":"Add a new resource tag for this entity.","parameters":[],"responses":{"200":{"description":"Data about the newly created tag.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"example-tag"},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"}},"required":["name","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Tags > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","tag"]},"v1-tags-post-team-scoped":{"operationId":"postTags","summary":"Add tag","description":"Add a new resource tag for this entity.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Data about the newly created tag.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"example-tag"},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"}},"required":["name","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Tags > Create","x-nf-team-scoped":true,"x-nf-cli-command":["add","tag"]},"v1-tags-put":{"operationId":"putTags","summary":"Put tag","description":"Update or create a resource tag.","parameters":[{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Tags > Update","x-nf-team-scoped":true,"x-nf-cli-command":["put","tag"]},"v1-tags-put-team-scoped":{"operationId":"putTags","summary":"Put tag","description":"Update or create a resource tag.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"}},"required":["name"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Tags > Update","x-nf-team-scoped":true,"x-nf-cli-command":["put","tag"]},"v1-tags--resourceTagId--get":{"operationId":"getTagsResourcetagid","summary":"Get tag","description":"View details for a given resource tag.","parameters":[{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"Data about the resource tag.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"example-tag"},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"}},"required":["name","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags"],"security":[],"x-nf-permission-required":"Account > Platform > Tags > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","tag"]},"v1-tags--resourceTagId--get-team-scoped":{"operationId":"getTagsResourcetagid","summary":"Get tag","description":"View details for a given resource tag.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"Data about the resource tag.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false,"default":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Tag"},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"example-tag"},"createdAt":{"type":"string","format":"date-time","description":"time of creation","example":"2000-01-01T12:00:00.000Z"}},"required":["name","id"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags","team"],"security":[],"x-nf-permission-required":"Account > Platform > Tags > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","tag"]},"v1-tags--resourceTagId--patch":{"operationId":"patchTagsResourcetagid","summary":"Update tag","description":"Patch a resource tag.","parameters":[{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Tags > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","tag"]},"v1-tags--resourceTagId--patch-team-scoped":{"operationId":"patchTagsResourcetagid","summary":"Update tag","description":"Patch a resource tag.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"useAsInfrastructureLabel":{"type":"boolean","description":"Expose this tag as an infrastructure label on service, harness, and job workloads after their next deployment. Required for usage in egress IP selectors.","example":false},"useSpotNodes":{"type":"boolean","description":"Schedule workloads to spot nodes","example":false},"useOnDemandNodes":{"type":"boolean","description":"Also allow workloads to schedule to on demand nodes. Only relevant if you want workloads to schedule across both spot and on demand nodes","example":false},"nodeAffinities":{"type":"array","items":{"type":"object","properties":{"preference":{"type":"boolean","default":false},"weight":{"type":"number","format":"float","minimum":1,"maximum":100,"description":"The node affinity weight. Required when `preference` is `true`."},"matchExpressions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"operator":{"type":"string","enum":["In","NotIn"]},"values":{"type":"array","items":{"type":"string"}}},"required":["key","operator","values"],"additionalProperties":false},"minItems":1}},"required":["matchExpressions"],"additionalProperties":false}},"sandboxing":{"type":"object","properties":{"builds":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for builds","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for builds","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for builds"}},"required":["enabled"],"additionalProperties":false,"description":"Build sandboxing runtime configurations"},"services":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for services","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for services","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for services"}},"required":["enabled"],"additionalProperties":false,"description":"Service sandboxing runtime configurations"},"addons":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for addons","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for addons","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for addons"}},"required":["enabled"],"additionalProperties":false,"description":"Addon sandboxing runtime configurations"},"jobs":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enables runtime scheduling constraints for jobs","example":false},"runtimeClass":{"oneOf":[{"type":"string","enum":["none","gvisor","kata-clh","kata-qemu"],"description":"Defines which runtime scheduling constraints apply for jobs","example":"gvisor"}],"description":"Defines which runtime scheduling constraints apply for jobs"}},"required":["enabled"],"additionalProperties":false,"description":"Job secure runtime configurations"}},"additionalProperties":false},"color":{"type":"string","pattern":"^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$","example":"#57637A"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Platform > Tags > Update","x-nf-team-scoped":true,"x-nf-cli-command":["patch","tag"]},"v1-tags--resourceTagId--delete":{"operationId":"deleteTagsResourcetagid","summary":"Delete tag","description":"Delete a resource tag.","parameters":[{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags"],"security":[],"x-nf-permission-required":"Account > Platform > Tags > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","tag"]},"v1-tags--resourceTagId--delete-team-scoped":{"operationId":"deleteTagsResourcetagid","summary":"Delete tag","description":"Delete a resource tag.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path","schema":{"name":"resourceTagId","type":"string","required":true,"description":"ID of the tag","example":"example-tag","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Tags","team"],"security":[],"x-nf-permission-required":"Account > Platform > Tags > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","tag"]},"v1-templates-get":{"operationId":"getTemplates","summary":"List templates","description":"Get a list of templates","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of templates.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"templates":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the template","example":"example-template"},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","id"],"additionalProperties":false},"description":"An array of template objects."}},"required":["templates"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","templates"]},"v1-templates-get-team-scoped":{"operationId":"getTemplates","summary":"List templates","description":"Get a list of templates","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of templates.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"templates":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the template","example":"example-template"},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","id"],"additionalProperties":false},"description":"An array of template objects."}},"required":["templates"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","templates"]},"v1-templates-post":{"operationId":"postTemplates","summary":"Create template","description":"Create a template","parameters":[],"responses":{"200":{"description":"Details about the newly created template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"template":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Details about the newly created template."},"templateRun":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false}},"required":["template"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"runOnCreation":{"type":"boolean","description":"If true, the template will be ran immediately after creation.","example":true},"runOnCreationArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides for the initial run. Valid only if `runOnCreation` is `true`."}},"additionalProperties":false,"description":"Options regarding how the template is run."}},"required":["name","apiVersion","spec"],"additionalProperties":false,"description":"Create a new template"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"runOnCreation":{"type":"boolean","description":"If true, the template will be ran immediately after creation.","example":true},"runOnCreationArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides for the initial run. Valid only if `runOnCreation` is `true`."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false,"description":"GitOps data for syncing this template with a file in version control."},"project":{"type":"object","properties":{}}},"required":["name","gitops"],"description":"Create a new template with GitOps enabled (use an existing git template)"}],"description":"Create a new template"}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","template"]},"v1-templates-post-team-scoped":{"operationId":"postTemplates","summary":"Create template","description":"Create a template","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}}],"responses":{"200":{"description":"Details about the newly created template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"template":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Details about the newly created template."},"templateRun":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false}},"required":["template"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"runOnCreation":{"type":"boolean","description":"If true, the template will be ran immediately after creation.","example":true},"runOnCreationArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides for the initial run. Valid only if `runOnCreation` is `true`."}},"additionalProperties":false,"description":"Options regarding how the template is run."}},"required":["name","apiVersion","spec"],"additionalProperties":false,"description":"Create a new template"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"runOnCreation":{"type":"boolean","description":"If true, the template will be ran immediately after creation.","example":true},"runOnCreationArgumentOverrides":{"type":"object","properties":{},"description":"Argument overrides for the initial run. Valid only if `runOnCreation` is `true`."}},"additionalProperties":false,"description":"Options regarding how the template is run."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false,"description":"GitOps data for syncing this template with a file in version control."},"project":{"type":"object","properties":{}}},"required":["name","gitops"],"description":"Create a new template with GitOps enabled (use an existing git template)"}],"description":"Create a new template"}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","template"]},"v1-templates--templateId--get":{"operationId":"getTemplatesTemplateid","summary":"Get template","description":"Get information about the given template.","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","template"]},"v1-templates--templateId--get-team-scoped":{"operationId":"getTemplatesTemplateid","summary":"Get template","description":"Get information about the given template.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"Details about the template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","template"]},"v1-templates--templateId--post":{"operationId":"postTemplatesTemplateid","summary":"Update template","description":"Update a template","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"Details about the newly updated template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"template":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Details about the updated template."},"templateRun":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false}},"required":["template"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."}},"required":["name","apiVersion","spec"],"additionalProperties":false,"description":"Update template"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false,"nullable":true,"description":"GitOps data for syncing this template with a file in version control. If set to `null`, removes GitOps handling from this template."}},"required":["name","gitops"],"additionalProperties":false,"description":"Update template GitOps settings (replace current template with git template)"}],"description":"Update a template"}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","template"]},"v1-templates--templateId--post-team-scoped":{"operationId":"postTemplatesTemplateid","summary":"Update template","description":"Update a template","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"Details about the newly updated template.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"template":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"id":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Identifier for the template","example":"example-template"},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]},"templateSha":{"type":"string","description":"The SHA of the current commit that is being used for the template.","example":"8c7e040ee3737ddc3a713363ae72bbe960e9fb16"}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"Whether autorun is enabled"}},"required":["autorun"],"additionalProperties":false},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"updatedAt":{"type":"string","format":"date-time","description":"time of update"}},"required":["name","apiVersion","spec","id","options"],"additionalProperties":false,"description":"Details about the updated template."},"templateRun":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false}},"required":["template"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeSchema"},"teardownSpec":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/V1TeardownNodeSchema"},"failurePolicy":{"type":"string","enum":["ignore","block"],"description":"Controls what happens if the teardown spec fails or times out. `ignore` (default) — proceed with resource deletion regardless. `block` — halt deletion and set the environment to `teardown_failed`","default":"ignore"}},"required":["spec"],"additionalProperties":false,"nullable":true,"description":"Optional spec to run when the template is deleted."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."}},"required":["name","apiVersion","spec"],"additionalProperties":false,"description":"Update template"},{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"argumentOverrides":{"type":"object","properties":{},"description":"Argument overrides stored outside of the template. If GitOps is enabled, these will not be saved in version control."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false,"nullable":true,"description":"GitOps data for syncing this template with a file in version control. If set to `null`, removes GitOps handling from this template."}},"required":["name","gitops"],"additionalProperties":false,"description":"Update template GitOps settings (replace current template with git template)"}],"description":"Update a template"}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","template"]},"v1-templates--templateId--delete":{"operationId":"deleteTemplatesTemplateid","summary":"Delete template","description":"Delete a template","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"x-nf-permission-required":"Account > Templates > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","template"]},"v1-templates--templateId--delete-team-scoped":{"operationId":"deleteTemplatesTemplateid","summary":"Delete template","description":"Delete a template","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"x-nf-permission-required":"Account > Templates > General > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","template"]},"v1-templates--templateId--opentofu-import-state-post":{"operationId":"postTemplatesTemplateidOpentofuImportState","summary":"Import OpenTofu state","description":"Moves state from another OpenTofu node in the same team to a node in this template. The state will be removed from the source node as such running the source node again may recreate resources.","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"The imported OpenTofu resource definitions.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"resourceDefinitions":{"type":"object","properties":{},"description":"Resource definitions copied from the source OpenTofu node."}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"copyResourceDefinitions":{"type":"boolean","description":"Whether to return the source node resource definitions so they can be applied to the target template.","default":true},"overwriteTargetState":{"type":"boolean","description":"Whether to replace state that already exists on the target OpenTofu node.","default":false},"sourceTemplateId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the template containing the source OpenTofu node.","example":"source-template"},"sourceStateKey":{"type":"string","description":"State key of the source OpenTofu node.","example":"source-state"},"targetStateKey":{"type":"string","description":"State key of the target OpenTofu node.","example":"target-state"}},"required":["sourceTemplateId","sourceStateKey","targetStateKey"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import-state","template"]},"v1-templates--templateId--opentofu-import-state-post-team-scoped":{"operationId":"postTemplatesTemplateidOpentofuImportState","summary":"Import OpenTofu state","description":"Moves state from another OpenTofu node in the same team to a node in this template. The state will be removed from the source node as such running the source node again may recreate resources.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"The imported OpenTofu resource definitions.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"resourceDefinitions":{"type":"object","properties":{},"description":"Resource definitions copied from the source OpenTofu node."}},"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"copyResourceDefinitions":{"type":"boolean","description":"Whether to return the source node resource definitions so they can be applied to the target template.","default":true},"overwriteTargetState":{"type":"boolean","description":"Whether to replace state that already exists on the target OpenTofu node.","default":false},"sourceTemplateId":{"type":"string","pattern":"^[A-Za-z0-9-]+$","description":"ID of the template containing the source OpenTofu node.","example":"source-template"},"sourceStateKey":{"type":"string","description":"State key of the source OpenTofu node.","example":"source-state"},"targetStateKey":{"type":"string","description":"State key of the target OpenTofu node.","example":"target-state"}},"required":["sourceTemplateId","sourceStateKey","targetStateKey"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Update","x-nf-team-scoped":true,"x-nf-cli-command":["import-state","template"]},"v1-templates--templateId--runs-post":{"operationId":"postTemplatesTemplateidRuns","summary":"Run template","description":"Run a template","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"Details about the newly create template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Run","x-nf-team-scoped":true,"x-nf-cli-command":["run","template"]},"v1-templates--templateId--runs-post-team-scoped":{"operationId":"postTemplatesTemplateidRuns","summary":"Run template","description":"Run a template","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}}],"responses":{"200":{"description":"Details about the newly create template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Templates > General > Run","x-nf-team-scoped":true,"x-nf-cli-command":["run","template"]},"v1-templates--templateId--runs-get":{"operationId":"getTemplatesTemplateidRuns","summary":"List template runs","description":"Get a list of template runs","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of template runs.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"templateRuns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"An array of template run objects."}},"required":["templateRuns"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","template-runs"]},"v1-templates--templateId--runs-get-team-scoped":{"operationId":"getTemplatesTemplateidRuns","summary":"List template runs","description":"Get a list of template runs","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query","schema":{"name":"status","type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Filter by template status.","example":"success","default":"pending","in":"query"}},{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query","schema":{"name":"concluded","type":"boolean","description":"Filter by whether the template is concluded.","in":"query"}}],"responses":{"200":{"description":"A list of template runs.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"templateRuns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"startedAt":{"type":"string","format":"date-time","description":"Timestamp the run started at.","example":"2021-01-01 12:01:00.000Z"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"concludedAt":{"type":"string","format":"date-time","description":"Timestamp the run concluded at.","example":"2021-01-01 12:10:00.000Z"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false},"description":"An array of template run objects."}},"required":["templateRuns"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","template-runs"]},"v1-templates--templateId--runs--templateRunId--get":{"operationId":"getTemplatesTemplateidRunsTemplaterunid","summary":"Get template run","description":"Get information about the given template run.","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path","schema":{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path"}}],"responses":{"200":{"description":"Details about the template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","template-run"]},"v1-templates--templateId--runs--templateRunId--get-team-scoped":{"operationId":"getTemplatesTemplateidRunsTemplaterunid","summary":"Get template run","description":"Get information about the given template run.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path","schema":{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path"}}],"responses":{"200":{"description":"Details about the template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"x-nf-permission-required":"Account > Templates > General > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","template-run"]},"v1-templates--templateId--runs--templateRunId--abort-post":{"operationId":"postTemplatesTemplateidRunsTemplaterunidAbort","summary":"Abort template run","description":"Abort the given template run.","parameters":[{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path","schema":{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path"}}],"responses":{"200":{"description":"Details about the template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates"],"security":[],"x-nf-permission-required":"Account > Templates > Runs > Abort","x-nf-team-scoped":true,"x-nf-cli-command":["abort","template-run"]},"v1-templates--templateId--runs--templateRunId--abort-post-team-scoped":{"operationId":"postTemplatesTemplateidRunsTemplaterunidAbort","summary":"Abort template run","description":"Abort the given template run.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path","schema":{"name":"templateId","type":"string","required":true,"description":"ID of the template","example":"example-template","in":"path"}},{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path","schema":{"name":"templateRunId","type":"string","required":true,"description":"ID of the template run","example":"16cf800b-ab28-421a-8ff9-a935b5ee89ad","in":"path"}}],"responses":{"200":{"description":"Details about the template run.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"Name of the template.","example":"Example Template"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200,"description":"Description of the template.","example":"This is a sample template."},"apiVersion":{"type":"string","enum":["v1.2"],"description":"The version of the Northflank API to run the template against.","example":"v1.2"},"options":{"type":"object","properties":{"autorun":{"type":"boolean","description":"If true, the template will run automatically whenever a change is made to it.","example":false},"concurrencyPolicy":{"type":"string","enum":["allow","queue","forbid","latest","replace"],"description":"Defines the concurrency behaviour of the template with respect to parallel runs.","example":"allow"}},"additionalProperties":false,"description":"Options regarding how the template is run."},"arguments":{"type":"object","properties":{},"description":"A set of arguments that can be referenced in a template using '${args.argumentName}'."},"gitops":{"type":"object","properties":{"vcsService":{"type":"string","enum":["bitbucket","gitlab","github","self-hosted","azure","origin"],"description":"The VCS provider to use.","example":"github"},"selfHostedVcsId":{"type":"string","pattern":"^([A-Za-z0-9-]+)|([0-9a-f]{24})$","description":"If projectType is self-hosted, the ID of the self-hosted vcs to use."},"accountLogin":{"type":"string","description":"By default, if you have multiple version control accounts of the same provider linked, Northflank will pick a linked account that has access to the repository. If `accountLogin` is provided, Northflank will instead use your linked account with that login name.","example":"github-user"},"vcsLinkId":{"type":"string","description":"Legacy key. Please used accountLogin instead."},"repoUrl":{"type":"string","pattern":"^(https:\\/\\/)?((www(\\.[a-zA-Z0-9-]{2,})+\\.)?[a-zA-Z0-9-]{2,})(\\.([a-zA-Z0-9-]{2,}))+(\\/([a-zA-Z0-9\\-._]{2,}))+?$","description":"URL of the Git repo to sync the file with.","example":"https://github.com/northflank-examples/remix-postgres-redis-demo"},"branch":{"type":"string","description":"The name of the branch to use.","example":"main"},"filePath":{"type":"string","pattern":"^\\/((?!\\.\\.?\\/)[a-zA-Z0-9-._]+\\/)*(?!\\.\\.?$)[a-zA-Z0-9-._]+$","description":"The file path in the repository. If using an existing file, it should be in JSON format.","examples":["/Dockerfile","northflank.json"]}},"required":["vcsService","repoUrl","branch","filePath"],"additionalProperties":false},"$schema":{"type":"string"},"spec":{"$ref":"#/components/schemas/V1TemplateNodeRunSchema"},"refs":{"type":"object","properties":{},"additionalProperties":false},"id":{"type":"string","description":"Identifier for the template run","example":"3dd592f6-ce63-45ee-acf8-13dc5ec5235c"},"templateId":{"type":"string","description":"Identifier for the template","example":"example-template"},"status":{"type":"string","enum":["pending","running","success","failure","aborted","aborting","queued","unknown","skipped","waiting","retrying","async_wait","approval_wait"],"description":"Status of the template run","example":"success","default":"pending"},"concluded":{"type":"boolean","description":"Whether the run has concluded (aborted, success, failed)","example":true,"default":false},"createdAt":{"type":"string","format":"date-time","description":"Timestamp the run was created at.","example":"2021-01-01 12:00:00.000Z"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp the run was last updated at.","example":"2021-01-01 12:00:00.000Z"}},"required":["name","apiVersion","spec","id","templateId","status","concluded","createdAt","updatedAt"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Templates","team"],"security":[],"x-nf-permission-required":"Account > Templates > Runs > Abort","x-nf-team-scoped":true,"x-nf-cli-command":["abort","template-run"]},"v1-tokens-get":{"operationId":"getTokens","summary":"List API tokens","description":"Lists API tokens belonging to the authenticated org or team, newest first. Only active tokens are returned unless the `all` query parameter is set.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"all","type":"boolean","description":"When true, include inactive tokens (revoked or expired). By default only active tokens are returned.","example":false,"default":false,"in":"query","schema":{"name":"all","type":"boolean","description":"When true, include inactive tokens (revoked or expired). By default only active tokens are returned.","example":false,"default":false,"in":"query"}}],"responses":{"200":{"description":"A list of API tokens.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID (slug) of the API token.","example":"my-api-token"},"name":{"type":"string","description":"The display name of the API token.","example":"My API Token"},"description":{"type":"string","description":"The description of the API token.","example":"CI/CD pipeline token"},"role":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the role.","example":"Developer"},"roleId":{"type":"string","description":"The ID (slug) of the role.","example":"developer"},"roleType":{"type":"string","enum":["team","org"],"description":"The type of the role.","example":"team"},"entityType":{"type":"string","enum":["team","org"],"description":"The entity type of the role.","example":"team"}},"additionalProperties":false,"description":"The role assigned to this token."},"creatorEmail":{"type":"string","format":"email","description":"The email of the user who created this token.","example":"user@example.com"},"createdAt":{"type":"string","format":"date-time","description":"The time the token was created.","example":"2024-01-15T10:30:00.000Z"},"expiresAt":{"type":"string","format":"date-time","nullable":true,"description":"The time the token expires, or null if it has no expiry.","example":"2024-07-15T10:30:00.000Z"},"revoked":{"type":"boolean","description":"Whether the token has been revoked.","example":false},"revokedAt":{"type":"string","format":"date-time","description":"The time the token was revoked, if it has been.","example":"2024-06-15T10:30:00.000Z"},"lastUsedAt":{"type":"string","format":"date-time","description":"The time the token was last used to authenticate.","example":"2024-06-01T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the token is currently active (not revoked and not expired).","example":true}},"required":["id","name","createdAt","revoked","active"],"additionalProperties":false,"description":"An API token."},"description":"An array of API tokens."}},"required":["tokens"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["API Tokens","org"],"security":[],"x-nf-permission-required":"Account > Admin > ApiTokens > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","api-tokens"]},"v1-tokens-get-team-scoped":{"operationId":"getTokens","summary":"List API tokens","description":"Lists API tokens belonging to the authenticated org or team, newest first. Only active tokens are returned unless the `all` query parameter is set.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}},{"name":"all","type":"boolean","description":"When true, include inactive tokens (revoked or expired). By default only active tokens are returned.","example":false,"default":false,"in":"query","schema":{"name":"all","type":"boolean","description":"When true, include inactive tokens (revoked or expired). By default only active tokens are returned.","example":false,"default":false,"in":"query"}}],"responses":{"200":{"description":"A list of API tokens.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tokens":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID (slug) of the API token.","example":"my-api-token"},"name":{"type":"string","description":"The display name of the API token.","example":"My API Token"},"description":{"type":"string","description":"The description of the API token.","example":"CI/CD pipeline token"},"role":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the role.","example":"Developer"},"roleId":{"type":"string","description":"The ID (slug) of the role.","example":"developer"},"roleType":{"type":"string","enum":["team","org"],"description":"The type of the role.","example":"team"},"entityType":{"type":"string","enum":["team","org"],"description":"The entity type of the role.","example":"team"}},"additionalProperties":false,"description":"The role assigned to this token."},"creatorEmail":{"type":"string","format":"email","description":"The email of the user who created this token.","example":"user@example.com"},"createdAt":{"type":"string","format":"date-time","description":"The time the token was created.","example":"2024-01-15T10:30:00.000Z"},"expiresAt":{"type":"string","format":"date-time","nullable":true,"description":"The time the token expires, or null if it has no expiry.","example":"2024-07-15T10:30:00.000Z"},"revoked":{"type":"boolean","description":"Whether the token has been revoked.","example":false},"revokedAt":{"type":"string","format":"date-time","description":"The time the token was revoked, if it has been.","example":"2024-06-15T10:30:00.000Z"},"lastUsedAt":{"type":"string","format":"date-time","description":"The time the token was last used to authenticate.","example":"2024-06-01T10:30:00.000Z"},"active":{"type":"boolean","description":"Whether the token is currently active (not revoked and not expired).","example":true}},"required":["id","name","createdAt","revoked","active"],"additionalProperties":false,"description":"An API token."},"description":"An array of API tokens."}},"required":["tokens"],"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["API Tokens","team"],"security":[],"x-nf-permission-required":"Account > Admin > ApiTokens > Read","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["list","api-tokens"]},"v1-tokens--tokenId--keys-post":{"operationId":"postTokensTokenidKeys","summary":"Rotate a key on an API token","description":"Creates a new key for an API token and sets all other keys to expire.","parameters":[{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path","schema":{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path"}}],"responses":{"200":{"description":"The newly created API key and token.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID of the new API key.","example":"550e8400-e29b-41d4-a716-446655440000"},"issuedAt":{"type":"string","format":"date-time","description":"The time the key was issued.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","issuedAt"],"additionalProperties":false,"description":"The newly created API key."},"token":{"type":"string","description":"The API token for authentication.","example":"eyJhbGciOiJIUzI1NiIs..."}},"required":["key","token"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["API Tokens","org"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"otherKeysExpiresAt":{"type":"string","format":"date-time","description":"Expiry time for all existing keys. Defaults to immediate expiry."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > ApiTokens > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["rotate","api-token-key"]},"v1-tokens--tokenId--keys-post-team-scoped":{"operationId":"postTokensTokenidKeys","summary":"Rotate a key on an API token","description":"Creates a new key for an API token and sets all other keys to expire.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path","schema":{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path"}}],"responses":{"200":{"description":"The newly created API key and token.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"UUID of the new API key.","example":"550e8400-e29b-41d4-a716-446655440000"},"issuedAt":{"type":"string","format":"date-time","description":"The time the key was issued.","example":"2021-01-20T11:19:53.175Z"}},"required":["id","issuedAt"],"additionalProperties":false,"description":"The newly created API key."},"token":{"type":"string","description":"The API token for authentication.","example":"eyJhbGciOiJIUzI1NiIs..."}},"required":["key","token"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["API Tokens","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"otherKeysExpiresAt":{"type":"string","format":"date-time","description":"Expiry time for all existing keys. Defaults to immediate expiry."}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Admin > ApiTokens > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["rotate","api-token-key"]},"v1-tokens--tokenId--keys--keyId--delete":{"operationId":"deleteTokensTokenidKeysKeyid","summary":"Delete a key from an API token","description":"Removes a key from an API token.","parameters":[{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path","schema":{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path"}},{"name":"keyId","type":"string","required":true,"description":"UUID of the API token key","example":"550e8400-e29b-41d4-a716-446655440000","in":"path","schema":{"name":"keyId","type":"string","required":true,"description":"UUID of the API token key","example":"550e8400-e29b-41d4-a716-446655440000","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["API Tokens","org"],"security":[],"x-nf-permission-required":"Account > Admin > ApiTokens > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","api-token-key"]},"v1-tokens--tokenId--keys--keyId--delete-team-scoped":{"operationId":"deleteTokensTokenidKeysKeyid","summary":"Delete a key from an API token","description":"Removes a key from an API token.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path","schema":{"name":"tokenId","type":"string","required":true,"description":"ID of the API token","example":"my-api-token","in":"path"}},{"name":"keyId","type":"string","required":true,"description":"UUID of the API token key","example":"550e8400-e29b-41d4-a716-446655440000","in":"path","schema":{"name":"keyId","type":"string","required":true,"description":"UUID of the API token key","example":"550e8400-e29b-41d4-a716-446655440000","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["API Tokens","team"],"security":[],"x-nf-permission-required":"Account > Admin > ApiTokens > Update","x-nf-team-scoped":true,"x-nf-org-scoped":true,"x-nf-cli-command":["delete","api-token-key"]},"v1-workload-identities-get":{"operationId":"getWorkloadIdentities","summary":"List workload identities","description":"Lists the workload identities saved to this account.","parameters":[{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of workload identities saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"workloadIdentities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"An array of workload identities"}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","workload-identities"]},"v1-workload-identities-get-team-scoped":{"operationId":"getWorkloadIdentities","summary":"List workload identities","description":"Lists the workload identities saved to this account.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query","schema":{"name":"per_page","type":"integer","minimum":1,"maximum":100,"description":"The number of results to display per request. Maximum of 100 results per page.","example":50,"default":50,"in":"query"}},{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query","schema":{"name":"page","type":"integer","minimum":1,"description":"The page number to access.","example":1,"in":"query"}},{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query","schema":{"name":"cursor","type":"string","minLength":24,"maxLength":24,"description":"The cursor returned from the previous page of results, used to request the next page.","in":"query"}}],"responses":{"200":{"description":"A list of workload identities saved to this account.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"workloadIdentities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"An array of workload identities"}}},"additionalProperties":false,"description":"Result data."},"pagination":{"type":"object","properties":{"hasNextPage":{"type":"boolean","description":"Is there another page of results available?","example":false},"cursor":{"type":"string","description":"The cursor to access the next page of results."},"count":{"type":"number","format":"float","description":"The number of results returned by this request.","example":1}},"required":["hasNextPage","count"],"additionalProperties":false,"description":"Data about the endpoint pagination."}},"required":["data","pagination"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Read","x-nf-team-scoped":true,"x-nf-cli-command":["list","workload-identities"]},"v1-workload-identities-post":{"operationId":"postWorkloadIdentities","summary":"Create workload identity","description":"Creates a new workload identity on this account. For managed roles using automatic provider setup, installation of the cloud resources is triggered automatically unless `noInstall=true` is passed.","parameters":[{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query","schema":{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query"}}],"responses":{"200":{"description":"Data about the newly created workload identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","workload-identities"]},"v1-workload-identities-post-team-scoped":{"operationId":"postWorkloadIdentities","summary":"Create workload identity","description":"Creates a new workload identity on this account. For managed roles using automatic provider setup, installation of the cloud resources is triggered automatically unless `noInstall=true` is passed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query","schema":{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query"}}],"responses":{"200":{"description":"Data about the newly created workload identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["name","spec"],"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Create","x-nf-team-scoped":true,"x-nf-cli-command":["create","workload-identities"]},"v1-workload-identities--workloadIdentityId--get":{"operationId":"getWorkloadIdentitiesWorkloadidentityid","summary":"Get workload identity","description":"Retrieves a workload identity by ID.","parameters":[{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}}],"responses":{"200":{"description":"Data about the workload identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","workload-identities"]},"v1-workload-identities--workloadIdentityId--get-team-scoped":{"operationId":"getWorkloadIdentitiesWorkloadidentityid","summary":"Get workload identity","description":"Retrieves a workload identity by ID.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}}],"responses":{"200":{"description":"Data about the workload identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Read","x-nf-team-scoped":true,"x-nf-cli-command":["get","workload-identities"]},"v1-workload-identities--workloadIdentityId--patch":{"operationId":"patchWorkloadIdentitiesWorkloadidentityid","summary":"Update workload identity","description":"Updates a workload identity. For managed roles using automatic provider setup, installation of the cloud resources is triggered automatically unless `noInstall=true` is passed.","parameters":[{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}},{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query","schema":{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query"}}],"responses":{"200":{"description":"Data about the workload identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"spec":{"type":"object","properties":{"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"},"roleName":{"nullable":true}},"required":["type","policyDocument","roleName"],"additionalProperties":false,"description":"An AWS managed role update that clears the custom role name."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"arn":{"type":"string"},"rolePath":{"nullable":true}},"required":["type","policyDocument","rolePath"],"additionalProperties":false,"description":"An AWS managed role update that clears the custom role path."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"arn":{"type":"string"},"roleName":{"nullable":true},"rolePath":{"nullable":true}},"required":["type","policyDocument","roleName","rolePath"],"additionalProperties":false,"description":"An AWS managed role update that clears both the custom role name and role path."},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","workload-identities"]},"v1-workload-identities--workloadIdentityId--patch-team-scoped":{"operationId":"patchWorkloadIdentitiesWorkloadidentityid","summary":"Update workload identity","description":"Updates a workload identity. For managed roles using automatic provider setup, installation of the cloud resources is triggered automatically unless `noInstall=true` is passed.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}},{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query","schema":{"name":"noInstall","type":"boolean","description":"Skip automatic installation of cloud resources after create or update for managed roles. The workload identity will be left in the unapplied/outdated state.","in":"query"}}],"responses":{"200":{"description":"Data about the workload identity.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"},"spec":{"type":"object","properties":{"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"},"roleName":{"nullable":true}},"required":["type","policyDocument","roleName"],"additionalProperties":false,"description":"An AWS managed role update that clears the custom role name."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"arn":{"type":"string"},"rolePath":{"nullable":true}},"required":["type","policyDocument","rolePath"],"additionalProperties":false,"description":"An AWS managed role update that clears the custom role path."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"arn":{"type":"string"},"roleName":{"nullable":true},"rolePath":{"nullable":true}},"required":["type","policyDocument","roleName","rolePath"],"additionalProperties":false,"description":"An AWS managed role update that clears both the custom role name and role path."},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"additionalProperties":false}},"additionalProperties":false}}},"required":true},"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Update","x-nf-team-scoped":true,"x-nf-cli-command":["update","workload-identities"]},"v1-workload-identities--workloadIdentityId--delete":{"operationId":"deleteWorkloadIdentitiesWorkloadidentityid","summary":"Delete workload identity","description":"Deletes a workload identity.","parameters":[{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","workload-identities"]},"v1-workload-identities--workloadIdentityId--delete-team-scoped":{"operationId":"deleteWorkloadIdentitiesWorkloadidentityid","summary":"Delete workload identity","description":"Deletes a workload identity.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}}],"responses":{"200":{"description":"The operation was performed successfully.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Result data.","example":{}}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Delete","x-nf-team-scoped":true,"x-nf-cli-command":["delete","workload-identities"]},"v1-workload-identities--workloadIdentityId--install-post":{"operationId":"postWorkloadIdentitiesWorkloadidentityidInstall","summary":"Install workload identity","description":"Triggers installation of the managed cloud resources (IAM role/policy) for a workload identity. For identities using an existing role, this validates and records the role details.","parameters":[{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}}],"responses":{"200":{"description":"Data about the workload identity after triggering installation.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Update","x-nf-team-scoped":true},"v1-workload-identities--workloadIdentityId--install-post-team-scoped":{"operationId":"postWorkloadIdentitiesWorkloadidentityidInstall","summary":"Install workload identity","description":"Triggers installation of the managed cloud resources (IAM role/policy) for a workload identity. For identities using an existing role, this validates and records the role details.","parameters":[{"name":"teamId","in":"path","required":true,"description":"ID of the team","schema":{"type":"string"}},{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path","schema":{"name":"workloadIdentityId","type":"string","required":true,"description":"ID of the workload identity","example":"example-workload-identity","in":"path"}}],"responses":{"200":{"description":"Data about the workload identity after triggering installation.","schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z](-?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)?$","minLength":3,"maxLength":39,"description":"ID of the workload identity","example":"example-workload-identity"},"name":{"type":"string","pattern":"^[a-zA-Z0-9]+((-|\\s)[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"example":"Example Workload Identity"},"description":{"type":"string","pattern":"^[a-zA-Z0-9.,?\\s\\\\/'\"()[\\];`%^&*\\-_:!]+$","maxLength":200},"priority":{"type":"integer","minimum":0,"maximum":100,"description":"The priority used to select a workload identity for each provider.","example":10,"default":10},"spec":{"type":"object","properties":{"providerLinkId":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100,"description":"The internal ID of the BYOC provider integration to use."},"roleMode":{"type":"string","enum":["managed","existing"]},"providerSetupMode":{"type":"string","enum":["auto","manual"]},"provider":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"policyDocument":{"type":"object","properties":{"Version":{"type":"string","enum":["2012-10-17","2008-10-17"]},"Statement":{"anyOf":[{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false,"description":"A single policy statement."},{"type":"array","items":{"type":"object","properties":{"Sid":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"Effect":{"type":"string","enum":["Allow","Deny"]},"Action":{"anyOf":[{"type":"string","description":"A single IAM action."},{"type":"array","items":{"type":"string"},"description":"A list of IAM actions."}],"description":"The IAM action(s) the statement applies to."},"Resource":{"anyOf":[{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$","description":"A single resource ARN."},{"type":"array","items":{"type":"string","pattern":"^(\\*|arn:[a-zA-Z0-9:*/\\-?_+=,.@]+)$"},"description":"A list of resource ARNs."}],"description":"The resource ARN(s) the statement applies to."},"Condition":{"type":"object","properties":{}}},"required":["Effect","Action","Resource"],"additionalProperties":false},"description":"A list of policy statements."}],"description":"The policy statement(s) of the IAM policy document."}},"required":["Version","Statement"],"additionalProperties":false,"description":"The AWS IAM policy document."},"roleName":{"type":"string","pattern":"^[\\w+=,.@-]{1,64}$","description":"The name for the AWS IAM role to create. If not specified, a name is generated automatically."},"rolePath":{"type":"string","pattern":"^\\/?[\\w+=,.@-]+(?:\\/[\\w+=,.@-]+)*\\/?$","description":"The path for the AWS IAM role to create."},"arn":{"type":"string"}},"required":["type","policyDocument"],"additionalProperties":false,"description":"An AWS role managed by Northflank, created from the given IAM policy document."},{"type":"object","properties":{"type":{"type":"string","enum":["aws"]},"existingRoleArn":{"type":"string"},"arn":{"type":"string"}},"required":["type","existingRoleArn"],"additionalProperties":false,"description":"An existing AWS IAM role, referenced by its ARN."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"permissions":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9.]+$"},"minItems":1,"description":"A list of GCP permissions to assign to this workload identity."},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","permissions"],"additionalProperties":false,"description":"A GCP service account managed by Northflank, granted the given list of permissions."},{"type":"object","properties":{"type":{"type":"string","enum":["gcp"]},"existingRoleAudience":{"type":"string"},"existingRoleImpersonationUrl":{"type":"string"},"impersonationUrl":{"type":"string"},"audience":{"type":"string"}},"required":["type","existingRoleAudience","existingRoleImpersonationUrl"],"additionalProperties":false,"description":"An existing GCP service account, referenced by its audience and impersonation URL."}],"description":"The cloud provider configuration for this workload identity."},"restrictions":{"type":"object","properties":{"projects":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by project should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined projects.","default":[]}},"additionalProperties":false,"description":"Configuration of project restriction settings."},"tags":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether restriction by tag should be enabled.","example":false},"items":{"type":"array","items":{"type":"string","pattern":"^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$","minLength":3,"maxLength":100},"description":"An array of previously defined tags to help identify and group the resource."},"matchCondition":{"type":"string","enum":["and","or"],"description":"If all or any of the tags must be present on the target for it to match the condition.","example":"or"}},"additionalProperties":false,"description":"Configuration of tag restriction settings."}},"additionalProperties":false,"description":"Configuration of restrictions."}},"required":["providerLinkId","roleMode","provider","restrictions"],"additionalProperties":false},"state":{"type":"object","properties":{"status":{"type":"string","enum":["unapplied","outdated","installing","updating","error","applied","deleting"],"description":"The current install status of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"errors":{"type":"array","items":{"type":"string"},"description":"Any errors encountered during installation."}},"required":["status"],"additionalProperties":false,"description":"The current state of the workload identity."},"updatedAt":{"type":"string","format":"date-time","description":"time of update"},"createdAt":{"type":"string","format":"date-time","description":"time of creation"}},"required":["id","name","spec"],"additionalProperties":false,"description":"Result data."}},"required":["data"],"additionalProperties":false,"description":"Response object."}}},"tags":["Integrations","team"],"security":[],"x-nf-permission-required":"Account > Cloud > WorkloadIdentities > Update","x-nf-team-scoped":true}}}}